피드로 돌아가기
Another simple TCP chat in C#? Why not
Dev.toDev.to
Backend

Single-thread 동기화와 Pool 기반 메모리 최적화 TCP 런타임 설계

Another simple TCP chat in C#? Why not

Luke Matt2026년 5월 16일7intermediate

Context

기존 Socket Wrapper의 낮은 추상화 수준으로 인한 메시지 Framing 및 Byte 스트림 처리 부담 발생. 다수 Client 연결 시 Thread-safety 확보를 위한 Lock 오버헤드와 빈번한 객체 생성으로 인한 GC Pressure 해결 필요.

Technical Solution

  • EChannelType.Share 및 ChannelTasks=1 설정을 통한 모든 Socket의 Single-thread 동기화 처리로 Lock-free 구조 구현
  • PoolId 속성을 이용한 List 객체 재사용으로 Heap 할당 최소화 및 GC 부하 감소
  • 단일 Buffer에 1회 Serialize 후 모든 Client에게 전송하는 구조를 통한 CPU 사이클 낭비 방지
  • SendSerialized 기반의 Mixed Sync/Async 전송 방식을 채택하여 Slow Client로 인한 Backpressure 발생 차단
  • EUserServer 상속 기반의 Contract 정의를 통한 RPC 스타일의 Message-driven 엔드포인트 추상화

- 고성능 네트워크 서버 설계 시 Thread-per-socket 대신 Single-threaded Event Loop 기반의 동기화 모델 검토 - 고빈도 메시지 전송 구간에서 객체 풀링(Object Pooling)을 통한 GC Pause 최소화 적용 - 브로드캐스트 구현 시 개별 전송 전 공통 페이로드를 1회만 직렬화하는 최적화 패턴 적용

원문 읽기