可能重複:
boost::async_write takes too long升壓ASIO :: ASYNC_WRITE()花費的時間太長
在我的服務器應用程序,我在一個theread運行ASIO服務處理大約100個連接。我發現async_write()有時需要很長時間,大約15ms(數據包很小)
我的問題是爲什麼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;
}
您希望異步函數能夠立即完成嗎?我想你不明白什麼是異步手段。 –
我還沒有使用問題的提升功能,但通常情況下,異步寫入的同步部分應該非常快速地完成,除非有緩衝區大小限制,並且它會恢復爲同步操作。也許如果你對一個塊進行一些未完成寫入的測試,改變緩衝區大小的影響(如果可以的話)等,你會發現一個相關性。 –
不要一直髮布相同的問題。如果你想明白爲什麼'async_write()'花費時間,那就問問。 –