문제

Asio를 배우려고 노력하고 있으며 웹 사이트의 예제를 따르고 있습니다.

io_service가 필요한 이유는 무엇이며 정확히 무엇을 하는가? 비동기 작업을 수행하는 동안 거의 모든 다른 기능으로 보내야하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

Asio 's io_service 비동기 기능에서 작동하기위한 촉진자입니다. 비동기 조작이 준비되면 중 하나를 사용합니다. io_service다시 전화 할 스레드가 실행됩니다. 그러한 스레드가 존재하지 않으면 자체 내부 스레드를 사용하여 전화합니다.

그것을 작동하는 대기열로 생각하십시오. 그것은 실행될 때 해당 작업이 그 스레드에서만 그렇게 할 것임을 보장합니다. run() 또는 run_once() 방법, 또는 소켓 및 비동기 IO를 다루는 내부 스레드.

모든 사람에게 전달 해야하는 이유는 기본적으로 누군가가 비동기 작업이 준비되기를 기다려야하고 자체 문서에 언급 된 바와 같이 io_service ASIO가 운영 체제의 I/O 서비스에 대한 링크이므로 플랫폼의 자체 비동기 알림을 다음과 같이 추상화합니다. kqueue, /dev/pool/, epoll, 그리고 다음과 같은 방법으로 작동하는 방법 select().

주로 IO_Service를 사용하여 시스템의 여러 부분에서 Demultiplex 콜백을 사용하고 동일한 스레드에서 작동하는지 확인하여 작업이 직렬화되었으므로 명시 적 잠금이 필요하지 않습니다. 비동기 응용 프로그램을위한 매우 강력한 관용구입니다.

당신은 그것을 볼 수 있습니다 핵심 문서 그 이유를 더 잘 느끼기 위해 io_service 필요하고 무엇을하는지.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top