1

boost.asio非同期読み取りデータを使用していhandle_readますが、時間がかかる場合(スリープなど)、他の接続に影響しますか?

4

2 に答える 2

2

非同期IOでは、通常、すべてを1つのスレッドで実行するため、できるだけ短くするようにしてください。入力を処理している間、あなたは間違いなく眠りたくありません。

Boostには、非同期スリープを実行できるタイマーがあります。

于 2012-08-28T15:44:48.030 に答える
2

1つのスレッドで実行する場合io_service::run、それに関連付けられているすべてのi/oオブジェクトの完了ハンドラーがio_service順番に呼び出されます。したがって、そのうちの1つに時間がかかりすぎると、すべてのキューがスタックします。

この状況を防ぐには、この完了ハンドラーを再設計するか、問題のあるハンドラーを持つi/oオブジェクトをio_service別のスレッドで実行されている専用のオブジェクトに関連付けることができます。

io_serivce(複数のスレッドで単一のスレッドを実行しても、ハンドラーがスレッド間でどのように分散されているかがわからないため、この問題は解決されないことに注意してください。)

于 2012-08-29T11:59:35.857 に答える