태그: 고성능네트워크
5편
-
C++ Asio post, dispatch, defer | 실행 큐 정밀 제어 [#4]
Asio의 post는 항상 큐 뒤에 넣고, dispatch는 이미 해당 executor 안이면 즉시 실행하며, defer는 다음 턴으로 미룬다는 차이를 코드로 비교하고, 채팅 서버와 타이머·Strand 예제에서 어떤 것을 골라야 하는지 결정 기준을 제시합니다.
-
C++ Asio Composed Operation | 비동기 함수 설계 [#7]
헤더를 읽고 길이만큼 바디를 읽는 두 단계 수신을 async_read_packet 하나로 묶는 Boost.Asio Composed Operation을 설계합니다. 상태 머신으로 비동기 호출을 연쇄하는 법과 async_initiate, 완료 토큰으로 콜백과 코루틴을 모두 지원하는 방법을 설명합니다.
-
C++ 멀티스레드 Asio의 딜레마 | Data Race와 Mutex의 한계 [#2]
io_context 하나를 스레드 풀에서 여러 run()으로 돌릴 때 같은 세션의 핸들러가 동시에 실행되어 data race가 생기는 구조, 핸들러 안에서 mutex를 잡으면 처리량이 떨어지는 이유, 락을 잡은 채 다른 핸들러를 기다리다 빠지는 데드락을 설명합니다.
-
C++ Strand | 락(Lock) 없는 동시성 제어 [#3]
Boost.Asio Strand가 mutex 없이 핸들러를 논리적으로 직렬화하는 원리, make_strand로 strand를 만들고 bind_executor로 완료 핸들러를 묶는 방법, 연결마다 strand 하나를 두는 세션 설계와 흔한 실수를 예제로 설명합니다.
-
C++ 핸들러 메모리 최적화 | 동적 할당 오버헤드 제거 [#5]
Asio 비동기 연산마다 완료 핸들러 상태를 담으려고 동적 할당이 일어나는 이유와, associated_allocator와 bind_allocator로 커스텀 할당자를 연결하는 방법, 고정 블록 풀에 폴백을 둔 스레드 로컬 풀 할당자의 설계 포인트를 설명합니다.