- 스레드 기반 동시성 포기하고 논블로킹 IO 도입하면 C10k 문제 회피하고 확장성 더 개선가능
- 논블로킹 IO란 입출력 연산을 요청하고 응답을 기다리는 대신 다른 작업으로 넘어가는 것을 말함
- 예를들어
- 논블로킹 읽기 연산 쓰면 네트워크 소켓으로 데이터 요청하고 데이터가 버퍼에 도달해 사용할 수 있게 될 때까지 실행 스레드가 다른일을 할 수 있음
- 단점은… 데이터를 읽을 준비가 되었는지 주기적인 확인이 필요한 것! 다른 유형의 소켓 논블로킹 소캣
- 모든 소캣은 논블로킹 모드로 전환 가능
- 피자 구울때 앉아서 가만히 쳐다보는 대신 때때로 피자가 얼마나 구워졌는지 확인하는 것
- 바쁜 대기 상태 busy waiting
별도의 스레드를 사용하지 않을수도있음. 논블로킹 IO쓰면서 입출력 연산에 쓰일 스레드 따로 두는건 메모리와 컨텍스 스위칭에 쓰일 시간만 낭비한느 것
!!!
논블로킹 입출력이 빠르다는것은 오해!!! 반드시 빠른건 아님! 빠른게 아니라 CPU 띵가띵가 놀게 안두는게 핵심인것! 대신 입출력 기다리는 동안 애플리케이션이 다른 일 할 수 있도록 할뿐. 전체적인 성능향상 이어질수있음. 프로세서가 다른일 할 수 있으니
논블로킹 입출력 제대로 활용하면 지연 시간 숨기고 애플리케이션의 반응성과 처리율을 향상시킬수 있음
또한, 다중 스레드 안써도 되서 골치아픈 스레드 동기화 문제나 스레드 관리 관련 시스템 자원 절약도 가능


