여러 클라이언트를 동시에 처리하는 대표적인 구조로 1개의 프로세스안에서 여러 개의 쓰레드를 만들어서 클라이언트 요청 처리
아래 예제는 소켓 프로그래밍의 서버에서 listen(backlog)로 여러 개의 클라이언트 접속을 하용
배경: network IO와 memory/disk IO간의 성능 차이에 따른 많은 클라이언트 처리 방식
클라이언트가 서버로 100MB 데이터 전송시 read I/O와 write socket I/O를 blocking, non-blocking, select로 처리하는 방식 비교
수신 buffer size는 1KB, 송신 버퍼는 로 제한함
non-blocking 전송은 IO 처리시간이 길 때 blocking을 하지 않고 CPU processing을 하기 위해서 이용하는 방식
non-blocking 전송을 할 때 select.select(read, write, error) 함수를 호출하여 read, write, or error IO가 가능해질 때 진행하도록 함
아래 예제 참고
nonblocking 서버에서 데이터 수신
HelloWorld 문자열을 많이 보내는 예제
blocking 으로 ? nonblocking으로 ? 아래 2개의 코드 중에서 오류가 발생합니다. 어떤 코드에서 어떤 오류가 발생할까요?
sock.setblocking(0) 에 대한 의미는 무엇일까요?
nonblocking 코드로 클라이언트에서 전송하는 예입니다.
아래 코드에서는 오류가 발생할까요?
다음 도서의 예제를 참고하세요.
파이썬 코딩도장: https://dojang.io/course/view.php?id=7
https://dojang.io/mod/page/view.php?id=2469