반응형
영상 제목
block I/O vs non-block I/O 개념을 설명합니다! 소켓 I/O를 예제로 주로 설명해요! I/O multiplexing(다중 입출력) 설명도 빠질 수 없겠죠? ;)
영상 링크
https://www.youtube.com/watch?v=mb-QHxVfmcs
영상 요약
I/O에 관하여
- I/O : 데이터의 입출력
- I/O의 종류: network(socket), file, pipe, device
Socket이란?
- 소켓: 네트워크 통신은 socket을 통해 데이터가 입출력된다.
- 백엔드 서버: 네트워크 상의 클라이언트들과 각각 소켓을 열고 통신
OS 레벨에서 Block I/O 동작 원리
- Block I/O: I/O 작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 블락됨
- non-block I/O: 프로세스/스레드를 블락시키지 않고 요청에 대한 현재 상태를 즉시 리턴 - 스레드가 다른 작업을 수행할 수 있다.
- non-block I/O 이슈: I/O 작업 완료를 어떻게 확인할 것인가?
- non-block I/O 결과 처리 방식
- 1. 완료됐는지 반복적으로 확인 - 완료된 시간, 완료 확인한 시간 차이 커서 처리 속도 느려질 수 있음/ 반복적 확인은 CPU낭비로 이어질 수 있음
- 2. I/O multiplexing 사용 (다중 입출력): 관심있는 I/O 작업들을 동시에 모니터링 하고 그 중에 완료된 I/O 작업들을 한번에 알려줌 - 네트워크 통신에 많이 사용
- 종류: select, poll, epoll, kqueue, IOCP(I/O completion port)
- 앞에 두개는 잘 안쓰임
- Linux epoll
- 3. callback / signal
- POSIX AIO
- LINUX AIO
- 널리 사용되지는 않음
- 4. io_uring...
- 핵심: non-block I/O를 통해 I/O 요청 완료 전에도 다른 일을 할 수 있음
- non-block I/O 결과 처리 방식
반응형