I/O 관련 질문

혁의 이미지

send, recv 등을 호출해서 I/O를 하게되면 I/O가 끝날때까지 호출한 쓰레드는 블럭되고 아무것도 못하죠.
그럼 이렇게 블럭된 상태의 쓰레드는 CPU를 계속 점유하나요? 아니면 I/O가 끝날때까지 wait하는건가요?

goforit의 이미지

리눅스 커널의 경우는 sleeping 합니다.

recv 함수가 호출하는 커널 network layer의 BSD Socket과 Transport에 해당하는 함수들을 보면 대강 이렇습니다.

recv(User space) ==> sys_recv (kernel space system call) -> sock_recvmsg -> tcp_recvmsg -> 그리고 sleeping 입니다.

Sleep 을 깨우는 것은 network tasklet 입니다.

혁의 이미지

감사합니다~