네트워크 프로그램을 아무 생각없이 구현하면..
I/O blocking이 발생해서 여러개의 다른 클라이언트 접속을 허용하지 않거나 성능 저하를 겪는 경우가 발생한다.
- Fork: 프로세스를 새로 만드는 방법으로 클라이언트 요청이 있을때마다 프로세스를 복사하여 여러 사용자에게 제공.
- Threads: 프로세스 방법이 아닌 쓰레드를 생성해서 여러 사용자들에게 제공.
- I/O Multiplexing: 여러 소켓에 대해 I/O를 병향적으로 하는 기법 다수 프로세스 혹은 스레드를 만들지 않고 여러 파일을 처리할 수 있다.
- 비동기 I/O: 비동기적으로 처리하는 기법. 시그널이 병행되어 존재함.
- Event Driven I/O: multiplexing을 추상화 함 libev, pyev, libevent 라이브러리가 있음.