C#中多線程的平行處理

來源:互聯網
上載者:User

標籤:lis   ISE   nts   阻塞   value   空間   訪問   使用   for   

System.Threading.Tasks,在該命名空間下Task是主類,表示一個類的非同步並發的操作,建立並行代碼的時候不一定要直接使用Task類,在某些情況下可以直接使用Parallel靜態類(System.Threading.Tasks.Parallel)下所提供的方法進行並行開發,而不用底層的Task執行個體。
平行處理無法保證順序,不需要考慮任務和線程的問題,執行效率加快,當然也不是絕對的,任務的開銷大小對並行任務有影響,如果任務很小,那麼由於並行管理的附加開銷(任務分配,調度,同步等成本),可能並存執行並不是最佳化方案。例如:迴圈列印10000個數字,for的迴圈比Parallel.For快

Parallel 類的使用(System.Threading.Tasks)

提供對並行迴圈和地區的支援。
在Parallel下面有三個常用的方法invoke,For和ForEach。

Stopwatch stopWatch = new Stopwatch();List<int> sourceList = new List<int>();for (int i = 0; i <= 10000; i++){    sourceList.Add(i);}stopWatch.Reset();stopWatch.Start();List<int> resultList = new List<int>();foreach (int option in sourceList) {    Thread.Sleep(1);    resultList.Add(option);}stopWatch.Stop();Console.WriteLine("正常運行:" + stopWatch.ElapsedMilliseconds + " ms.");stopWatch.Reset();stopWatch.Start();ConcurrentBag<int> concurrentBagList = new ConcurrentBag<int>();ParallelOptions options = new ParallelOptions();options.MaxDegreeOfParallelism = 4;Parallel.ForEach(sourceList, options, (item) =>{    Thread.Sleep(1);    concurrentBagList.Add(item);});stopWatch.Stop();Console.WriteLine("並行運行:" + stopWatch.ElapsedMilliseconds + " ms.");

上面的例子,如果把Thread.Sleep(1),去掉可以發現,foreach比Parallel.ForEach快,所以任務的開銷很重要。ConcurrentBag如果換成List可以發現,list中的資料不夠。List集合,數組Int[],String[] ……,Dictory字典等等。但是這些列表、集合和數組的線程都不是安全的,不能接受並發請求。微軟也提供了安全執行緒的類Concurrent

Concurrent類(System.Collections)

命名空間提供多個安全執行緒集合類。當有多個線程並發訪問集合時,應使用這些類代替 System.Collections 和 System.Collections.Generic 命名空間中的對應類型。

BlockingCollection<T> 為實現 IProducerConsumerCollection<T> 的安全執行緒集合提供阻塞和限制功能。
ConcurrentBag<T>表示對象的安全執行緒的無序集合。可以用來替換List<T>
ConcurrentDictionary<TKey, TValue>表示可由多個線程同時訪問的索引值對的安全執行緒集合。Dictionary<TKey, TValue>
ConcurrentQueue<T>表示安全執行緒的先進先出 (FIFO) 集合。Queue<T>
ConcurrentStack<T>表示安全執行緒的後進先出 (LIFO) 集合。Stack<T>

C#中多線程的平行處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.