跳至內容

任務並行

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

任務平行(英語:Task parallelism),也稱為功能平行(function parallelism)或控制平行(control parallelism),是平行計算程序設計模型的一種。在這個模型中,每一個線程執行一個分配到的任務,而這些線程則被分配(通常是操作系統內核)到該並行計算體系的各個計算節點中去。

多處理器調度

[編輯]

一般任務在處理器上通過調度用戶線程(User Thread,相對於內核線程Kernel Thread)實現的。操作系統也可提供一個用戶模式下的調度器。調度器的任務就是儘可能合理的將任務分配和均衡到各個處理器上。

相關概念

[編輯]

同步是任務並行里涉及到最重要的任務之間通信的方法,分為進程同步(或者線程同步)和數據同步。數據同步和進程同步的目的是為了使程序在多處理器執行的條件下保持一定的內存模型。

  • 進程同步主要研究如何確定數個進程之間的執行順序和避免數據競爭(Data race condition)的問題。避免數據競爭的常用方法是在程序中設立臨界區,即一次只允許一個線程執行的一段代碼,通常用於保護重要的公共變量。然而也有理論研究一次允許數個線程執行臨界區代碼的一般情況,稱為l-exclusion英語l-exclusion問題。
  • 數據同步則是研究如何保證在一個變量的多個副本之間保持一致性的問題。數據同步通常涉及到的話題有Cache一致性(Cache Coherence),數據複製(Data replication)等等。

同步對象是用於實現同步的數據結構對象。可分為內核同步對象與用戶同步對象。用戶同步對象更有效率;內核同步對象使得線程在用戶態與內核態切換,花銷巨大。用戶態的同步對象有臨界區與原子操作等;內核態的同步對象有內存屏障(Memory barrier)、互斥鎖(Mutex)、信號量(Semaphore)和(Lock)、管程(Monitor)、消息(Message)、自動重置事件、人工重置事件、自動重置定時器、人工重置定時器、進城、線程、作業、文件、 控制台輸入、文件修改通知、管道(Pipe)等。

內核同步對象通常有signalednonsignaled兩種狀態,可分別譯作置位的(標誌的、通知的)與未置位的(未標誌的、未通知的)。當操作系統設置一個同步對象為signaled,任何等待該對象的線程被從該對象上釋放,從等待狀態變為可執行狀態。同步對象通過等待句柄(waitable handle)訪問。等待句柄處於signaled狀態,則該等待句柄不被任何線程擁有。[1]

Windows操作系統的API:WaitForSingleObject、WaitForMulitpleObjects、SignalObjectAndWait(通知一個內核對象並等待另一個內核對象的原子操作)、MsgWaitForMultipleObjects(等待多個內核對象阻塞時仍可以響應Windows消息的到來)、MsgWaitForMultipleObjectsEx用來等待同步對象從nonsignaled變為signaled狀態。

參見

[編輯]

參考文獻

[編輯]
  1. ^ MSDN:Advanced Synchronization Techniques. [2017-02-16]. (原始內容存檔於2017-02-16).