Socket Programming2
1. 쓰레드 프로그래밍
여러 클라이언트를 동시에 처리하는 대표적인 구조로 1개의 프로세스안에서 여러 개의 쓰레드를 만들어서 클라이언트 요청 처리
아래 예제는 소켓 프로그래밍의 서버에서 listen(backlog)로 여러 개의 클라이언트 접속을 하용
2. 블로킹, 논블로킹, Select 멀티플렉싱
배경: 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 코드로 클라이언트에서 전송하는 예입니다.
아래 코드에서는 오류가 발생할까요?
3. 비동기 프로그래밍
다음 도서의 예제를 참고하세요.
파이썬 코딩도장: https://dojang.io/course/view.php?id=7
https://dojang.io/mod/page/view.php?id=2469