一 概述 任務和並行程式設計

2021-10-05 20:53:12 字數 1077 閱讀 2901

使用多執行緒有幾個原因。假設從應用程式進行網路呼叫需要一定的時間。我們不希望使用者介面停止響應,讓使用者一直等待,直到從伺服器返回乙個響應。使用者可以同時執行其他一些操作,或者甚至取消傳送給伺服器的請求。這些都可以使用執行緒來實現。

對於所有需要等待的操作,例如,因為檔案、資料庫或網路訪問都需要一定的時間,此時就可以啟動乙個新執行緒,同時完成其他任務。即使是處理密集型的任務,執行緒也是有幫助的。乙個程序的多個執行緒可以同時執行在不同的cpu上,或多核cpu的不同核心上。

還必須注意執行多執行緒時的一些問題。它們可以同時執行,但如果執行緒訪問相同的資料,就很容易出問題。為了避免出問題,必須實現同步機制。

除了使用任務之外,還可以使用paraller類實現並行活動。需要區分資料並行(在不同的任務之間同時處理一些資料)和任務並行性(同時執行不同的功能)。

在建立並行程式時,有很多不同的選擇。應該使用適合場景的最簡單選項。本章首先介紹parallel類,它提供了非常簡單的並行性。如果這就是需要的類,使用這個類即可。如果需要更多的控制,比如需要管理任務之間的關係,或定義返回任務的方法,就要使用task類。

本章還包括資料流庫,如果需要基於操作的程式設計通過管道傳送資料,這可能是最簡單的乙個庫了。

如果需要更多地控制並行性,如設定優先順序,就需要使用thread類。

建立乙個並行執行多個任務的程式,可能導致爭用條件和死鎖。需要注意同步技術。

使用多個任務是很容易的,只要它們不訪問相同的變數。在某種程度上可以避免這種情況,但有時,一些資料需要共享。共享資料時,需要應用同步技術。執行緒訪問相同的資料,而沒有進行同步,立即出現問題是比較幸運的。但很少會出現這種情況。本章討論了爭用條件和死鎖,以及如何應用同步機制來避免它們。

.net framework提供了同步的幾個選項。同步物件可以用在乙個程序中或跨程序中。可以使用它們來同步乙個任務或多個任務來訪問乙個資源或許多資源。同步物件也可以用來通知完成的任務。本章介紹所有這些同步物件。

注意:

盡可能使用不可變的型別可能部分地避免同步問題。在不可變的資料結構中,資料只能初始化,以後就不能更改了。所以這些型別不需要同步。

在長長的概述之後,下面從parallel類開始——給應用程式新增並行性的一種簡單方式。

並行程式設計與PLINQ 任務並行

任務並行 在tpl當中還可以使用parallel.invoke方法觸發多個非同步任務,其中 actions 中可以包含多個方法或者委託,paralleloptions用於配置parallel類的操作。public static void invoke action actions public st...

Python函式式程式設計指南(一) 概述

這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計 有些人喜歡稱為pythonic 比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在 對python不提供經典for迴圈感到...

Python函式式程式設計指南(一) 概述

這大概算是python最難啃的一塊骨頭吧。在我python生涯的這一年裡,我遇到了一些pythoner,他們毫無例外地完全不會使用函式式程式設計 有些人喜歡稱為pythonic 比如,從來不會傳遞函式,不知道lambda是什麼意思,知道列表展開但從來不知道用在 對python不提供經典for迴圈感到...