asioを学ぼうとしていますが、私はWebサイトの例に従っています。
io_serviceが必要なのはなぜですか?それは正確に何をしますか?非同期操作を実行しているときに、他のほとんどすべての関数に送信する必要があるのはなぜですか。最初の「バインド」後にそれ自体を「作成」できないのはなぜですか。
asioを学ぼうとしていますが、私はWebサイトの例に従っています。
io_serviceが必要なのはなぜですか?それは正確に何をしますか?非同期操作を実行しているときに、他のほとんどすべての関数に送信する必要があるのはなぜですか。最初の「バインド」後にそれ自体を「作成」できないのはなぜですか。
Asio'sio_service
は、非同期関数を操作するためのファシリテーターです。非同期操作の準備ができると、io_service
実行中のスレッドの1つを使用してコールバックします。そのようなスレッドが存在しない場合は、独自の内部スレッドを使用して呼び出します。
操作を含むキューと考えてください。run()
これらの操作は、実行時に、またはメソッドを呼び出したスレッドでのみ実行されることを保証しますrun_once()
。または、ソケットと非同期IOを処理する場合は、その内部スレッドでのみ実行されます。
基本的に、非同期操作の準備が整うまで誰かが待機する必要があるためです。独自のドキュメントに記載されているように、io_service
ASIOはオペレーティングシステムのI / Oサービスにリンクしているため、プラットフォーム自体の非同期通知機能を抽象化します。、、、などkqueue
、およびそれらを操作するためのメソッド。/dev/pool/
epoll
select()
主に、io_serviceを使用して、システムの複数の部分からのコールバックを逆多重化し、それらが同じスレッドで動作することを確認します。操作はシリアル化されるため、明示的なロックは不要です。これは、非同期アプリケーションにとって非常に強力なイディオムです。
コアドキュメントを見て、なぜio_service
必要なのか、そしてそれが何をするのかをよりよく理解することができます。