**思路
將要處理的資料放到concurrentqueue
中,然後開啟多個執行緒去處理資料,處理完成後,再到佇列中獲取下乙個待處理資料。
直接上**concurrentqueue
表示執行緒安全的先進先出 (fifo) 集合,屬於system.collections.concurrent
命名空間下的乙個資料結構
/// /// 多執行緒處理資料(無返回值)
///
/// 資料型別
/// 待處理資料
/// 資料處理方法(有引數無返回值)
/// 處理執行緒數量
/// 是否等待執行結束
static void runtask(listlist, actionaction, int threadcount = 5, bool waitflag = true)
});}
if (waitflag)
}/// /// 多執行緒處理資料(返回處理後列表)
///
/// 資料型別
/// 待處理資料
/// 資料處理方法(有引數有返回值)
/// 處理執行緒數量
/// 資料處理後結果
static listruntask(listlist, funcfunc, int threadcount = 5)
return rlist;
});}
task.waitall(tasks);
for (int i = 0; i < threadcount; i++)
return result;
}
呼叫方法listlist = new list() ;
//輸出列表中的資料,且加上「action」字元字首
runtask(list, d => );
//對列表中資料都執行 「*2」 的操作
var result = runtask(list, d => );
result.foreach(d => console.writeline(d));
最後的話
上面的**只是簡單的實現了對資料的處理,並沒有考慮到對記憶體的使用限制,一般的專案中使用還是可以的。
最後我嘗試了下,生成乙個100m的列表,然後將其載入到concurrentqueue
,監控程式記憶體占用,發現沒有很大的記憶體占用變化。
C 多執行緒處理資料
os centos 7 編譯環境 gcc 4.8 cpu 2顆 intel r xeon r cpu e5 2670 v3 2.30ghz,24核48執行緒。int pthread create pthread t thread,const pthread attr t restrict attr,...
C 多執行緒處理
region 變數初始化 string tx 任務執行緒分派數 每次設定一組 一組十個執行緒 任務執行緒 限制最多十個執行緒 long threadcount 0 long maxthreadcount 10 manualreseteventslim manual new manualresetev...
C 多執行緒處理基礎
cpu 處理器 或者核心 核心是實際執行程式的硬體單元。程序是某個程式當前正在執行的例項 作業系統的一項基本功能就是管理程序。每個程序都包含乙個或多個執行緒。程式中可以使用system.diagnostics命名空間的process類的例項來訪問程序。在語句和表示式的級別上,c 本質上就是在描述控制...