C# 任務和線程的區別

任務即Task類,線程即Thread類。

使用任務執行並行和併發代碼是微軟強烈推薦的,因爲任務比線程的抽象級別更高,而且任務是並行的。關於併發和並行的區別,這裏就不做介紹了,網上有很多資料。

1、線程池

創建任務的基本原理是使用線程池,也就是說任務最終也是要交給線程去執行的。但是微軟優化了任務的線程池,使線程的控制更加精準和高效。對於需要頻繁創建線程的程序來說,使用線程池無疑是最好的選擇。因爲創建一個線程需要消耗大量的系統資源,而線程池很好的解決了這個問題。當你使用線程池創建10個線程時,系統可能只創建了3、4個線程,因爲線程池中的線程是可以循環使用的。下面舉個例子說明一下:

 這裏使用task創建了10個任務,但是系統只創建了4個線程。創建的線程數是根據個人電腦配置不同而不同的。

 再看一下使用Thread類創建線程的情況:

 可以看到這裏創建了10個線程,而且在時間上也比使用任務創建線程的時間要長。

這是任務和線程的區別之一,也是優勢之一,下面介紹另一個區別

2、並行

我們知道現在的電腦CPU基本上都是多核的,並行就是很好的利用了多核,更加高效的利用了電腦的硬件資源。

當我們使用task類創建一個任務時,這個任務默認就是並行執行的。而使用Thread創建多個線程時,默認是併發執行的。

3、前臺線程和後臺線程

task默認是後臺線程,而thread默認是前臺線程。關於前臺線程和後臺線程的區別這裏不做介紹。

當然我們也可以設置task爲前臺線程,Thread.CurrentThread.IsBackground,將IsBackground設置爲false即可。

我們也可以使用同樣的屬性把thread設置成後臺線程。

4、總結

任務是微軟強烈推薦處理多線程的有效類庫,請儘可能使用任務創建多線程。

 

 

 

 

 

 

發佈了38 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章