728x90
반응형
플랫폼별 구현 정보 (Platform-Specific Implementation Notes)
이 섹션에는 기본 디멀티플렉싱 메커니즘, 내부적으로 생성된 스레드 수 및 스레드 생성 시기와 같은 플랫폼별 세부 구현 정보가 나열되어 있다.
Linux Kernel 2.4
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다. 이는 프로세스 내에 파일 디스크립터 수가 FD_SETSIZE를 초과할 수 없음을 의미한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집):
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
Linux Kernel 2.6
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 epoll을 사용한다.
스레드:
- epoll을 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집):
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
솔라리스 (Solaris)
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 /dev/poll을 사용한다.
스레드:
- /dev/poll을 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 쵀대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
QNX Neutrino
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다. 이는 프로세스 내에 파일 디스크립터의 수가 FD_SETSIZE를 초과할 수 없음을 의미한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
Mac OS X
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 kqueue를 사용한다.
스레드:
- kqueue를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
FreeBSD
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 kqueue를 사용한다.
스레드:
- kqueue를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
AIX
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다. 이는 프로세스내에 파일 디스크립터의 수가 FD_SETSIZE를 초과할 수 없음을 의미한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
HP-UX
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다. 이는 프로세스내에 파일 디스크립터의 수가 FD_SETSIZE를 초과할 수 없음을 의미한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
Tru64
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다. 이는 프로세스내에 파일 디스크립터의 수가 FD_SETSIZE를 초과할 수 없음을 의미한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기식 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 한 번의 작업으로 최대 min(64, IOV_MAX) 크기의 버퍼를 전송할 수 있다.
Windows 95, 98 and Me
디멀티플렉싱 메커니즘:
- 디멀티플렉싱에 select를 사용한다.
스레드:
- select를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 스레드 중 하나에서 수행된다.
- 각 io_context에서 추가한 스레드는 비동기 호스트 확인을 에뮬레이트하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Scatter-Gather(분산-수집)
- 소켓의 경우, 단일 작업으로 최대 16개의 버퍼를 전송할 수 있다.
Windows NT, 2000, XP, 2003, Vista, 7 and 8
디멀티플렉싱 메커니즘:
- 비동기 연결(connect)을 제외한 모든 비동기 소켓 작업에 오버랩드(overlapped) I/O 및 I/O 완료 포트를 사용한다.
- 비동기 연결(connect)을 에뮬레이트하기 위해 select를 사용한다.
스레드:
- I/O 완료 포트를 사용한 디멀티플렉싱은 io_context::run(), io_context::run_one(), io_context::poll() 또는 io_context::poll_one()을 호출하는 모든 스레드에서 수행된다.
- 각 io_context에서 추가한 스레드는 타이머 트리거에 사용된다. 이 스레드는 basic_deadline_timer 또는 basic_waitable_timer 개체의 처음 생성에서 만들어진 것이다.
- 각 io_context에서 추가한 스레드는 select 디멀티플렉싱에 사용된다. 이 스레드는 async_connect()에 대한 첫 번째 호출에서 생성된다.
- 각 io_context에서 추가한 스레드는 비동기 호스트 확인을 에뮬레이트 하는 용도로 사용된다. 이 스레드는 ip::tcp::resolver::async_resolve() 또는 ip::udp::resolver::async_resolve()에 대한 첫 번째 호출에서 생성된다.
Sactter-Gather(분산-수집)
- 소켓의 경우, 단일 작업으로 최대 64개의 버퍼를 전송할 수 있다.
- 스트림 지향 핸들의 경우, 단일 작업에서 하나의 버퍼만 전송할 수 있다.
Windows Runtime
Boost.Asio는 Windows 런타임에 대한 제한된 지원을 제공한다. 언어 확장이 활성화되어 있어야 한다. Windows 런타임 API에 의해 노출되는 제한된 기능으로, 제공되는 지원에는 다음과 같은 주의 사항이 있다:
- io_context, 스트랜드(strand), 버퍼, 구성된 작업, 타이머 등과 같은 핵심 기능은 모두 정상적으로 작동해야 한다.
- 소켓의 경우 클라이언트 TCP만 지원된다.
- 클라이언트 TCP 소켓의 명시적 바인딩은 지원되지 않는다.
- cancel() 함수는 소켓에 대해 지원되지 않는다. 비동기 작업은 소켓을 닫아야 취소할 수 있다.
- null_buffers를 사용하는 작업은 지원되지 않는다.
- tcp::no_delay 및 socket_base::keep_alive 옵션만 지원된다.
- 리졸버(resolver)는 서비스 이름을 지원하지 않고 숫자만 지원한다. 즉, "http" 대신에 "80"을 사용해야 한다.
- 대부분 리졸버(resolver) 쿼리 플래그는 효과가 없다.
디멀티플렉싱 메커니즘:
- Windows::Networking::Sockets::StreamSocket 클래스를 사용하여 비동기 TCP 소켓 작업을 구현한다.
스레드:
- 이벤트 완료는 Windows 스레드 풀에 전달되고 핸들러가 실행될 수 있도록 io_context에 전달(posted)된다.
- 각 io_context에서 추가한 스레드는 타이머 트리거에 사용된다. 이 스레드는 첫 번째 타이머 개체를 생성할 때 만들어진다..
Scatter-Gather(분산-수집)
- 소켓의 경우, 한 번의 작업으로 최대 하나의 버퍼를 전송할 수 있다.
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 튜토리얼 (0) | 2020.12.14 |
---|---|
Boost.Asio 사용 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 퓨쳐 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 크로노 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 공유 포인터 (0) | 2020.12.13 |