我用C++写了个本地代理服务器,目前使用的是即时创建,即时销毁的方式使用多线程的,每一个HTTP请求创建一个线程,交换数据的时候创建一个线程(即一个线程向客户端取数据向服务端发,一个线程向服务端取数据向客户端发),这些线程处理任务的时间都非常短,处理完后即CloseHandle销毁了。但有时候并发请求数多了以后,感觉还是有点延迟。这种情况下,是不是采用线程池比较好?
闭关修行中......
如果你的http請求處理是比較耗時的,那麼每個http請求都建立一個執行緒是不錯的選擇。 但你目前的情況是處理任務的時間很短,那麼大部分時間都是消耗在創建和銷毀線程上了。
可以採取執行緒池處理任務佇列的方法來處理。 可以參考下面這個實作。 C++11的簡單執行緒池程式碼閱讀 http://www.cnblogs.com/oloroso/p/5881863.html
執行緒建立銷毀的開銷很高,而且執行緒多了記憶體佔用也很高。四代i7 DDR5下估計每秒鐘只能完成千級的創建和銷毀。這個開銷與配置和平台有關。
同配置用std::condition_variable和std::mutex實現的執行緒池,每秒鐘能輕鬆完成百萬級次的同步。
具體耗時可以寫一個簡單的程式測試一下。建議採用線程池。
為了防止突發請求,需要用線程池,根據業務請求提前分配好線程數目,線程池的操作是異步操作大大的降低線程資源爭搶。
如果你的http請求處理是比較耗時的,那麼每個http請求都建立一個執行緒是不錯的選擇。
但你目前的情況是處理任務的時間很短,那麼大部分時間都是消耗在創建和銷毀線程上了。
可以採取執行緒池處理任務佇列的方法來處理。
可以參考下面這個實作。
C++11的簡單執行緒池程式碼閱讀 http://www.cnblogs.com/oloroso/p/5881863.html
執行緒建立銷毀的開銷很高,而且執行緒多了記憶體佔用也很高。四代i7 DDR5下估計每秒鐘只能完成千級的創建和銷毀。這個開銷與配置和平台有關。
同配置用std::condition_variable和std::mutex實現的執行緒池,每秒鐘能輕鬆完成百萬級次的同步。
具體耗時可以寫一個簡單的程式測試一下。建議採用線程池。
為了防止突發請求,需要用線程池,根據業務請求提前分配好線程數目,線程池的操作是異步操作大大的降低線程資源爭搶。