본문 바로가기
기타/아카이브

[Network Basic] 3. TCP Connection

by Riverandeye 2020. 6. 11.

Multiplexing TCP connection

소켓 API는 기본적으로 blocking이라, accept() 하면 일단 block되고 본다. recv()로 data를 받을 때도 물론.

사용자가 1명이면 Blocking I/O가 문제가 되진 않겠지만, 실제로는 그럴리가 없다. 여러 connection을 동시에 다루는 기술이 필요하다.

 

Polling Non-blocking Sockets

소켓 자체가 non-blocking operation을 할수 있게 하는 방법 중 fcntl 함수를 호출하는 것인데, 단순히 모든 active socket을 순서대로 확인하는 polling 구조로 되어있어 자원 낭비가 심하며, 구현해야 할게 추가적으로 발생한다. 그래서 일반적으로 Polling 방식을 잘 쓰지 않는다.

 

Forking and Multithreading

매 커넥션마다 쓰레드나 프로세스를 구성하는 방법은, blocking 자체를 방지하지만 쓰레드를 잘 쓰는것 자체가 어렵고 만약 쓰레드가 state를 공유하는 경우라면 복잡도가 매우 높아진다. 또 각 os가 쓰레드를 위해 서로 다른 API를 쓰다보니 더 복잡하다. 

Unix에서 멀티프로세스 작동시키는건 단순히 fork() 함수를 사용하는거라 비교적 간단하지만, 그 자체를 사용하는게 어렵다. 

 

75p

댓글