日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单使用Boost线程池threadpool

發布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单使用Boost线程池threadpool 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:

1.在一些多線程的程序中,比如服務端響應請求時,可以同時響應多個客戶端的請求,但是響應請求的個數(即線程)的個數過多的話就會造成系統資源損耗過多而宕機,還比在做一些下載的程序時,可同時開5個下載任務,對應的其實就是線程。但是最多線程是有上限的,而且每次創建線程和銷毀線程都會大量損耗資源和時間。所以解決辦法之一就是使用線程池控制線程個數,復用創建過的線程。

threadpool直接使用Boost庫,不需要另外編譯Boost庫

只是開啟線程,調度線程的數量,不對單個線程進程操作(比如暫停,恢復,停止)

編譯的時候注意加上鏈接庫:

LIBS := -lboost_thread

#include <stdio.h> #include <string.h> #include <iostream> #include <boost/threadpool.hpp>using namespace std; using namespace boost::threadpool;void task_1() {cout << "task_1 start" << endl;cout << "thead_id(task_1): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 10; i++){cout << "1111111111111111111111111" << endl;sleep(1);} }void task_2() {cout << "task_2 start" << endl;cout << "thead_id(task_2): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 30; i++){cout << "222222222222222222222222" << endl;sleep(1);} }void DoGetVersionNoForUpdate(int a) {cout << "task_3 start" << endl;cout << "thead_id(task_3): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 5; i++){cout << a*a << endl;sleep(1);} }int main(int argc, char *argv[]) {//設置允許開啟的線程數pool tp(10);//加入線程調度,可以通過指針傳參tp.schedule(&task_1);tp.schedule(&task_2);int i =10;tp.schedule(boost::bind(DoGetVersionNoForUpdate, i));//tp.wait();return (0); }

總結

以上是生活随笔為你收集整理的简单使用Boost线程池threadpool的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。