Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 플랫폼별 구현 정보

까마귀75 2020. 12. 13. 03:08
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/OI/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.AsioWindows 런타임에 대한 제한된 지원을 제공한다. 언어 확장이 활성화되어 있어야 한다. Windows 런타임 API에 의해 노출되는 제한된 기능으로, 제공되는 지원에는 다음과 같은 주의 사항이 있다:

 

  • io_context, 스트랜드(strand), 버퍼, 구성된 작업, 타이머 등과 같은 핵심 기능은 모두 정상적으로 작동해야 한다.
  • 소켓의 경우 클라이언트 TCP만 지원된다.
  • 클라이언트 TCP 소켓의 명시적 바인딩은 지원되지 않는다.
  • cancel() 함수는 소켓에 대해 지원되지 않는다. 비동기 작업은 소켓을 닫아야 취소할 수 있다.
  • null_buffers를 사용하는 작업은 지원되지 않는다.
  • tcp::no_delaysocket_base::keep_alive 옵션만 지원된다.
  • 리졸버(resolver)는 서비스 이름을 지원하지 않고 숫자만 지원한다. 즉, "http" 대신에 "80"을 사용해야 한다.
  • 대부분 리졸버(resolver) 쿼리 플래그는 효과가 없다.

디멀티플렉싱 메커니즘:

 

  • Windows::Networking::Sockets::StreamSocket 클래스를 사용하여 비동기 TCP 소켓 작업을 구현한다.

스레드:

 

  • 이벤트 완료는 Windows 스레드 풀에 전달되고 핸들러가 실행될 수 있도록 io_context에 전달(posted)된다.
  • io_context에서 추가한 스레드는 타이머 트리거에 사용된다. 이 스레드는 첫 번째 타이머 개체를 생성할 때 만들어진다..

Scatter-Gather(분산-수집)

 

  • 소켓의 경우, 한 번의 작업으로 최대 하나의 버퍼를 전송할 수 있다.

 

 

Boost.Asio 개요  Boost.Asio 홈

728x90
반응형