io_service, 왜 그리고 어떻게 사용됩니까?
-
23-08-2019 - |
문제
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
필요하고 무엇을하는지.