Mac OS線程開發包介紹

Mac OS線程開發包介紹

 

Mac OS X提供了到幾套API用於創建程序級別的線程。從行爲上來看,這些API創建的線程的本質是一樣的。

 

你可以根據你的程序(Carbon, Cocoa, Darwin)選擇一套API函數, 同時也要考慮它的性能和複雜度。

 

舉個例子,Cocoa線程使用比較簡單,但是它比POSIX線程少了一些彈性和性能。

 

在接下來的文章我將給你介紹這些不同的線程API,比較每種實現的優點和缺點。所有的線程(除了註明)都是根據當前運行的狀態和優先級搶先式運行。

 

注意:在下面的文章中,線程的介紹從實現的級別由低到高的方式介紹,展示了每層上線程的實現是如何建立在上一層的技術之上。這個順序並不能作爲你應用程序使用的建議指導。你選擇必須是根據當前的具體功能和性能要求作出分析。

 

分類:

 

Mach Threads 

POSIX Threads 

Cocoa Threads 

Carbon Multiprocessing Services 

Carbon Thread Manager

 

 

Mach Threads

 

 

 

Mach threads (有時候指內核線程)提供了系統級別的線程的實現方法。所有其它的線程函數都是建立在Mach線程之上。應用程序開發者很少需要直接使用Mach線程。Mach線程一般用於內核級別程序的開發,像內核的擴展程序。應用程序如果需要調用的線程的話,應該是使用POSIX或其它更高層次的API

 

注意: 雖然I/O Kit運行在內核級別,但是它們沒有直接使用Mach線程,相反,I/O Kit 定義自己的類和函數來實現線程。如想了解更多的信息,請參照Device Drivers (Kernel/IOKit) Reference.

 

POSIX Threads

 

 

 

一個POSIX 線程(通常指一個“pthread”)是一個基於Mach線程封裝的較量級的API,它提供了用戶級別的處理。POSIX線程是所有應用程序級別線程的基礎,包括Cocoa線程, Carbon線程, POSIX線程是基於C語言的API函數,提供了全面的創建控制和信息讀取的功能。全面也意味着你的程序必須比其它線程API需要更多的設置和管理。(舉個例子,不像其它的線程包,一個POSIX線程是不會自動同程序的主線程發生聯繫。) 因爲程序對於線程的行爲需要更多的控制,可是,POSIX 線程比其它API提供了更高的性能。

 

另一個好處就是POSIX 線程API已經在多個平臺上實現,因此,你用POSIX 線程實現的代碼能夠運行在大多數的UnixWindows操作系統。

 

如想了解更多的信息,請參照pthread主頁

 

Cocoa Threads

 

 

 

Cocoa threads (NSThread類實現)提供了一個創建和管理線程的高級類。NSThread內部是採用POSIX線程來實現,但是NSThread也提供了更多自動管理POSIX線程的數據和行爲的能力。它同時也會派發Cocoa通知消息給應用程序,通知應用程序當前的線程狀態。

 

這個NSThread類應該在Cocoa應用程序或其它使用Foundation framework的程序優先使用。NSThread對象的性能非常好,雖然一些額外的開銷使得它比POSIX線程慢。但在大部分的情況下,這些開銷是可以忽略不計的。

 

更多關於創建Cocoa線程和使用NSThread類,請參照“Creating Threads in Cocoa”

 

Carbon Multiprocessing Services

 

 

 

Carbon 應用程序中,Carbon Multiprocessing Services 是作爲搶先式線程的管理API。這個模型是建立在Mac OS 9MP Task API之上,創建MP Task API只是 Carbon線程管理的折中模型。使用Multiprocessing Services API,一個應用程序可以在多處理機器上運行搶先式的線程,同時具有並行運行能力。

 

對於Carbon應用程序,Multiprocessing Services是創建線程的首選。這些API創建搶先式線程與POSIX線程和NSThread類是差不多的。而且,這個API也提供了一些更強的功能,如線程的同步,通知,定時,遠程調用,異常處理,semaphores和臨界標記。

 

更多關於使用Multiprocessing Services API信息,請參照Multiprocessing Services Programming Guide Multiprocessing Services Reference

 

Carbon Thread Manager

 

 

 

Carbon Thread Manager是一個歷史遺留的API,主要作用是爲了Carbon應用程序管理一系列輔助線程。不像搶先式線程,這裏的每個線程的運行依賴與其它線程,指定的時間內只有一個應用程序的輔助線程可以在運行。線程由一個叫round-robin manner選擇,當它們收到內核的通知運行的時候,你可以把這些輔助線程看成是一個組。收到內核通知的時候這個組中只能有一個被激活的線程可以運行,其它線程進入休眠狀態一直要等到運行線程進入到休眠。

 

注意: 我們不建議現在還用Carbon線程管理來進行線程開發。這些API只要爲了那些把他們的應用程序轉到Mac OS X,同時那些代碼還需要輔助線程。假如你現在正在寫一個新的Carbon應用程序,必須要用POSIX線程或Multiprocessing Services API來替換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章