C socket 통신에서의 blocking, non blocking

c4fiber·2023년 12월 22일
0

SW사관학교 정글7기

목록 보기
33/49

어떻게 OS는 소켓에서 데이터가 도착했는지 확인하고 read를 수행하는가?


socket통신은 기본적으로 blocking으로 작동한다.
요청이 들어오기 전까지 계속 대기상태에 있다가 (while을 통한 무한루프, busy waiting) 데이터가 들어오면 읽기를 수행하는 방식이다.

하지만 무한루프를 매번 실행하는건 시스템 자원을 너무 소모하고 의미없는 일이기 때문에 매번 read를 수행하지 않고, 처리하는 방식이 있을 것이라 생각했다.

네트워크 이벤트 발생


추측으로는 특정 시그널을 나타내는 데이터를 보낸다던가, physical layer에서 펄스신호를 통해 데이터 전송시작을 알리는 방식과 비슷하다고 생각했다.

알아본 바로는 네트워크 어댑터에서 이벤트를 발생시킨다 이다.

네트워크 어댑터에서 새로운 데이터를 전송받으려고 하면 OS에 네트워크 이벤트를 발생시키고, 이때 OS는 read를 수행하는 것이다.

상세한 부분은 depth-2를 넘어간다고 생각해서 더 깊게 찾아보지는 않았다.

관련 내용으로 chatgpt의 답변링크를 남긴다. (가장 마지막 답변)
https://chat.openai.com/share/1c710df6-e9a6-49d7-994b-feb3d3130e1b

읽으면 도움될 자료


데이터 통신 (위키백과)
https://en.wikipedia.org/wiki/Data_communication

windows server에서 네트워크 어댑터 튜닝하기
https://learn.microsoft.com/en-us/windows-server/networking/technologies/network-subsystem/net-sub-performance-tuning-nics

L2 Switch
https://networkencyclopedia.com/layer-2-switch/

profile
amazing idiot

0개의 댓글