태그: Boost.Asio
11편
-
C++로 로드 밸런서 구현하기: Round-Robin·Least Connections·Consistent Hashing, 헬스 체크
특정 서버에 트래픽이 몰리거나 한 대가 죽으면 502가 나는 문제를 C++ 로드 밸런서로 풀어 봅니다. 라운드 로빈, 가중치, 최소 연결, Consistent Hashing 구현과 Asio TCP 프록시, 비동기 헬스 체크와 서킷 브레이커, 빈 백엔드 목록 같은 경계 조건을 다룹니다.
-
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++ Asio 데드락 디버깅 | 비동기 콜백 실전
Asio 서버가 가끔 멈출 때 흔한 원인인 락을 잡은 채 비동기 완료를 기다리는 패턴과 락 순서 불일치를 시퀀스 다이어그램으로 설명합니다. strand로 락을 줄이는 설계, std::lock 사용, 멈춘 프로세스의 스레드 덤프로 원인을 좁히는 방법을 다룹니다.
-
C++ Boost.Asio io_context 이벤트 루프 | 동작 원리 정리 [#1]
Boost.Asio io_context가 작업 큐와 Proactor 모델로 핸들러를 실행하는 방식, run()과 poll()의 차이, run()이 곧바로 반환되는 문제를 work_guard로 막는 법, 단일·멀티 스레드 실행 모델과 graceful shutdown 구현을 다룹니다.
-
C++ Strand | 락(Lock) 없는 동시성 제어 [#3]
Boost.Asio Strand가 mutex 없이 핸들러를 논리적으로 직렬화하는 원리, make_strand로 strand를 만들고 bind_executor로 완료 핸들러를 묶는 방법, 연결마다 strand 하나를 두는 세션 설계와 흔한 실수를 예제로 설명합니다.
-
C++ 핸들러 메모리 최적화 | 동적 할당 오버헤드 제거 [#5]
Asio 비동기 연산마다 완료 핸들러 상태를 담으려고 동적 할당이 일어나는 이유와, associated_allocator와 bind_allocator로 커스텀 할당자를 연결하는 방법, 고정 블록 풀에 폴백을 둔 스레드 로컬 풀 할당자의 설계 포인트를 설명합니다.
-
C++20 코루틴과 Asio | 콜백 지옥 탈출 [#6]
C++20 코루틴과 Boost.Asio의 awaitable, co_await, use_awaitable로 콜백 중첩 없이 비동기 읽기·쓰기를 작성하는 방법과, 예외 기반과 redirect_error를 이용한 error_code 기반 에러 처리, 타이머를 이용한 취소·타임아웃을 코루틴 Echo 서버 예제로 설명합니다.
-
C++ 고성능 네트워크 가이드 시리즈 목차 | Boost.Asio·이벤트 루프·코루틴
Boost.Asio·Asio 고성능 네트워크 가이드. io_context 이벤트 루프, Strand, post/dispatch/defer, 핸들러 할당, C++20 코루틴, Composed Operation까지 7편 정리.
-
Boost.Asio 입문: io_context, 비동기 타이머·읽기·쓰기, 핸들러 수명과 work_guard
Boost.Asio로 비동기 I/O를 시작하는 방법. 블로킹과 논블로킹 비교, io_context와 run, 비동기 타이머, async_read/async_write, 비동기 TCP 클라이언트·서버, 핸들러 수명과 work_guard 실수를 다룹니다.