C++ 短时间高并发任务用即时多线程好还是线程池好?
阿神
阿神 2017-04-17 15:31:18
0
3
461

我用C++写了个本地代理服务器,目前使用的是即时创建,即时销毁的方式使用多线程的,每一个HTTP请求创建一个线程,交换数据的时候创建一个线程(即一个线程向客户端取数据向服务端发,一个线程向服务端取数据向客户端发),这些线程处理任务的时间都非常短,处理完后即CloseHandle销毁了。
但有时候并发请求数多了以后,感觉还是有点延迟。这种情况下,是不是采用线程池比较好?

阿神
阿神

闭关修行中......

全部回覆(3)
阿神

如果你的http請求處理是比較耗時的,那麼每個http請求都建立一個執行緒是不錯的選擇。
但你目前的情況是處理任務的時間很短,那麼大部分時間都是消耗在創建和銷毀線程上了。

可以採取執行緒池處理任務佇列的方法來處理。
可以參考下面這個實作。
C++11的簡單執行緒池程式碼閱讀 http://www.cnblogs.com/oloroso/p/5881863.html

伊谢尔伦

執行緒建立銷毀的開銷很高,而且執行緒多了記憶體佔用也很高。四代i7 DDR5下估計每秒鐘只能完成千級的創建和銷毀。這個開銷與配置和平台有關。

同配置用std::condition_variable和std::mutex實現的執行緒池,每秒鐘能輕鬆完成百萬級次的同步。

具體耗時可以寫一個簡單的程式測試一下。建議採用線程池。

小葫芦

為了防止突發請求,需要用線程池,根據業務請求提前分配好線程數目,線程池的操作是異步操作大大的降低線程資源爭搶。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板