I/O 작업
은 Kernel level에서만 수행
할 수 있다. Process, Thread는 커널에게 I/O를 요청
해야 한다.I/O
작업이 진행되는 동안 user Process(Thread) 는 자신의 작업을 중단한 채 대기
Resource 낭비
가 심함 (I/O 작업이 CPU 자원을 거의 쓰지 않으므로)I/O Blocking 형태의 작업은
(1) Process(Thread)가 Kernel에게 I/O를 요청하는 함수를 호출
(2) Kernel이 작업을 완료하면 작업 결과를 반환 받음.
I/O
작업을 진행하는 작업을 중지
client 별로 별도의 Thread를 생성
해야 함접속자 수가 매우 많아짐
많아진 Threads
로 컨텍스트 스위칭 횟수가 증가
함,,, 비효율적
인 동작 방식I/O
작업이 진행되는 동안 User Process의 작업을 중단하지 않음.
recvfrom 함수 호출
(커널에게 해당 Socket으로부터 data를 받고 싶다고 요청함)"EWOULDBLOCK"을 return
함.User Process는 다른 작업을 진행
할 수 있음.Buffer로부터 데이터를 복사하여 받아옴.
recvBuffer는 Kernel이 가지고 있는 메모리에 적재
되어 있으므로, Memory간 복사
로 인해, I/O보다 훨씬 빠른 속도로 data를 받아
올 수 있음.recvfrom 함수
는 빠른 속도로 data를 복사
한 후, 복사한 data의 길이와 함께 반환
함.[출처]
https://github.com/gyoogle/tech-interview-for-developer