重複の可能性:
boost::async_writeに時間がかかりすぎる
私のサーバーアプリケーションでは、1回の読み取りでasioサービスを実行して、約100の接続を処理します。async_write()に時間がかかりすぎることがあり、約15ミリ秒かかることがわかりました(パケットは非常に小さいです)
私の質問は、なぜasync_write()に非常に長い時間がかかるのかということです。async_write()はすぐに戻るはずだと思います。非常にゆっくりと多くのデータを送信することは困難です。つまり、関数はすぐには返されません。送信がすぐに完了しないとは言われていません。15msは同期機能には長すぎます。そして、アプリケーションは本当にブロックされています。(GetTickCountは気にしないでください)
次のようなコードのテスト:
uint64_t TStart = 0, TEnd = 0;
TStart = GetTickCount();
async_write(*this->m_Socket,
boost::asio::buffer(pSendData->m_buf.GetBuffer(), pSendData->m_buf.GetSize()),
boost::bind(&SttSocketConnection::OnSended, this,
pSendData, placeholders::error, placeholders::bytes_transferred));
TEnd = GetTickCount();
if (TEnd - TStart > 1) {
__asm int 3;
TStart = TEnd;
}