I/O 통지 기법
IO모델 (동기vs비동기vs블로킹vs논블로킹)
IO모델 (동기vs비동기vs블로킹vs논블로킹)
Linux 빨간색소년 2017. 8. 4. 16:48 참 많이 보고, 써먹는 용어다. 확실히 정리를 해보자. 일단 IO 작업은 사용자레벨에서 직접 수행할 수 없다. 실제 IO를 수행하는 건 커널에서만 가능하다. 따라서 사용자 프로세스(또는 쓰레드)는 커널에게 IO를 요청해야한다. 블로킹 : 애플리케이션 실행 시 운영체제 대기 큐에 들어가면서 요청에 대한 system call이 완료된 후에 응답을 보낸다.
https://sjh836.tistory.com/109
select 와 epoll
select는 싱글쓰레드로 다중 I/O를 처리하는 멀티플렉싱 통지모델의 가장 대표적인 방법이다. 해당 파일 디스크립터가 I/O를 할 준비가 되었는지 알 수 있다면, 그 파일 디스크립터가 할당받은 커널Buffer에 데이터를 복사해주기만 하면된다. 이런 목적하에 통지모델은 파일디스크립터의 상황을 파악할 수 있게 하는 기능을 할 수 있어야한다. select는 많은 파일 디스크립터들을 한꺼번에 관찰하는 FD_SET 구조체를 사용하여 빠르고 간편하게 유저에게 파일 디스크립터의 상황을 알려준다.
https://ozt88.tistory.com/21

windows IOCP 기초
이전 게시물까지 이야기 했던 통지모델들은 싱글쓰레드 멀티플렉싱을 위한 확장처럼 보였다. 하지만 싱글쓰레드 스마트폰도 보기 힘든 2015년 현재, 굳이 하이엔드 스펙을 갖춘 서버에서 싱글쓰레드를 써야할까? 이전 멀티쓰레드형 서버의 문제는 컨텍스트 스위칭 비용이었다. 하지만 CPU개수만큼만 쓰레드를 사용한다면, 컨텍스트 스위칭 문제는 크게 문제가 되지 않는다. 그러니까 우리는 딱 CPU개수만큼만 쓰레드를 쓰는 서버 를 만들고 싶다.
https://ozt88.tistory.com/23


Seonglae Cho