WindowsクライアントにBoost::ASIOバージョン1.52.0を使用しています。サーバーからのすべての受信メッセージを処理するためのスレッドと、サーバーへのすべての送信メッセージを処理するための別の専用スレッドを専用にできるようにしたいと思います。現在、両方のスレッドに同じio_service
オブジェクトを使用しています。私が心配しているのは、io_service::run()
メソッドが呼び出されると、送信メッセージを処理しているスレッドが、一部の受信メッセージ呼び出しを処理するようにスケジュールされる可能性があることです。その逆も同様です。だから、私の質問-これは可能ですか?もしそうなら、2番目のio_service
オブジェクトを使用して問題を解決しますか?スレッドごとに1つですか?これを設計するためのより良い方法はありますか?読み取りハンドラーと書き込みハンドラーの両方に複数のスレッドを使用しないようにしています。
もう1つ確認したいのは、2つ以上async_reads
を同時に実行できる場合は、コードをシングルスレッド化するためにロックを使用する必要があることを読みました。同様にasync_writes
。an async
_readが。と同時に実行できる場合にもロックを使用するasync_write
必要がありますか、それともスレッドセーフである必要がありますか?
最後の質問-非同期メソッド-、、、async_connect
およびasync_read
すべてasync_write
は、ワーカースレッドがio_service
runメソッドを呼び出す前に、別のスレッドから呼び出すことができますか?