서버4 Overlapped IO와 IOCP Overlapped IO 모델 IOCP는 Overlapped IO모델을 기반으로 확장한 것으로 뗄레야 뗄 수 없는 사이 Overlapped IO모델은 어플리케이션은 입출력 함수를 호출하면 그 사이 무관하게 다른 작업을 진행할 수 있다. 그렇다 비동기 논블로킹이다. 이게 어떻게 가능하냐면, 입출력 작업이 끝나면 운영체제는 작업완료를 어플리케이션에 알려준다. 그럼 어플리케이션은 다른 작업을 중단하고 입출력 결과를 처리하면 되는 것이다. IOCP에서 보면, Completion Port를 만들어 두고 소켓을 그곳에 등록하면, 소켓이 입출력작업이 완료된 것을 Worker 쓰레드를 이용해서 GetQueuedCompletionStatus로 완료된 소켓이나 어떤 이벤트인지(이건 Overlapped Event로 구현) .. 2022. 11. 27. 셀렉트 모델 강의로 IOCP만 급하게 만들어보다 보니까 기본기가 안되어있는 것 같아서 정리한다. 일단 Select 모델을 정리해보자 Select모델의 경우, API중 Select라는 함수를 핵심적으로 이용하는 방식이라 Select 모델이라고 한다. 셀렉트 모델을 사용하면 여러 소켓을 한 스레드로 처리를 할 수 있다고 한다. 그게 어떻게 가능한거냐면, 셀렉트 모델에서는 여러 소켓들을 셋(Set)에 넣어두고, Select 함수를 호출하면 하나의 소켓이라도 동작이 완료되면 정상적인 함수를 반환하여, 이를 처리하는 방식이다. 그렇다면 사용법은? FD_ZERO, FD_SET, FD_CLR, FD_ISSET 같은 셀렉트와 같이 쓰이는 방식의 매크로함수가 있고, 이것들을 Select와 같이 사용하는 방식으로, 조금 더 구체적으로.. 2022. 11. 27. Zero-Copy 이게 뭐더냐? 이것도 면접에서 나왔다.. 클라이언트 직무로 지원해서 이런건 안나올줄 알았는데.. Zero-Copy라는 걸 처음 듣고 머리가 띵해졌다. 진짜 처음 들어봐서 찾아보니 있더라.. 서버를 깊게 공부하지 않아서 몰랐나보다 Zero-Copy는 내가 IOCP서버를 공부하며 만들 때 나도 모르게 쓰이고 있었다. IOCP와 뗄레야 뗄 수 없는 Overlapped IO라는 친구에 의해서 사용된다고 하던데.. 이는 일반 소켓이 아닌 WSAsocket을 만들어야 사용할 수 있다. 왜냐? 비동기 논블로킹 모델이니까! 일반 소켓은 동기,블로킹이다.. 그리고 WSArecv 나 WSAsend의 매개변수를 자세히 보면, overlapped 어쩌고 하는 부분이 있다. 그 부분에 사용을 하는건데, 이 부분을 NULL로 밀지말고 유효한 .. 2022. 11. 25. 블로킹 vs 논블로킹? 동기 vs 비동기? 관점차이에 대한 주제다. 처음에 서버 공부를 할 때, 여러 서버 모델을 배우는데 Blocking이 sync, Non-Blocking이 Async인건가? 하면서 의아했었다. 나는 처음에 그냥 같은걸 다르게 말하는건줄 알았는데, 이게 면접질문에서 나와서 당황한적이 있어서, 다시는 안까먹을려고 여기에 글 쓴다. 이건 그림 필수다. 그림을 보자. 이미지 출처 : Homo Efficio님 블로그 이 그림만 보면 대충이라도 Bloking sync와 Non-Blocking Async의 차이를 말할 수 있다. 그림에 나와있듯이 Sync Blocking은 그냥 이 시간동안 다른일 못 한다, 반면에 Async Non-Blocking은 다른 일을 할 수있다. 그러면 이제 Blocking Asnyc랑 Non-Blocking .. 2022. 11. 25. 이전 1 다음