mac os
執行緒開發包介紹
mac os x
提供了到幾套
api用於建立程式級別的執行緒。從行為上來看,這些
api建立的執行緒的本質是一樣的。
你可以根據你的程式(
carbon, cocoa, darwin
)選擇一套
api函式,
同時也要考慮它的效能和複雜度。
舉個例子,
cocoa
執行緒使用比較簡單,但是它比
posix
執行緒少了一些彈性和效能。
在接下來的文章我將給你介紹這些不同的執行緒
api,比較每種實現的優點和缺點。所有的執行緒(除了註明)都是根據當前執行的狀態和優先順序搶先式執行。
注意:在下面的文章中,執行緒的介紹從實現的級別由低到高的方式介紹,展示了每層上線程的實現是如何建立在上一層的技術之上。這個順序並不能作為你應用程式使用的建議指導。你選擇必須是根據當前的具體功能和效能要求作出分析。
分類:
mach threads
mach threads (
有時候指核心執行緒
)提供了系統級別的執行緒的實現方法。所有其它的執行緒函式都是建立在
mach
執行緒之上。應用程式開發者很少需要直接使用
mach
執行緒。mach
執行緒一般用於核心級別程式的開發,像核心的擴充套件程式。應用程式如果需要呼叫的執行緒的話,應該是使用
posix
或其它更高層次的
api。
注意:
雖然i/o kit
執行在核心級別,但是它們沒有直接使用
mach
執行緒,相反,
i/o kit .
posix threads 乙個
posix
執行緒(通常指乙個
「pthread」
)是乙個基於
mach
執行緒封裝的較量級的
api,它提供了使用者級別的處理。
posix
執行緒是所有應用程式級別執行緒的基礎,包括
cocoa
執行緒, carbon
執行緒, posix
執行緒是基於
c語言的
api函式,提供了全面的建立控制和資訊讀取的功能。全面也意味著你的程式必須比其它執行緒
api需要更多的設定和管理。(舉個例子,不像其它的執行緒包,乙個
posix
執行緒是不會自動同程式的主線程發生聯絡。)
因為程式對於執行緒的行為需要更多的控制,可是,
posix
執行緒比其它
api提供了更高的效能。
另乙個好處就是
posix
執行緒api
已經在多個平台上實現,因此,你用
posix
執行緒實現的**能夠執行在大多數的
unix
和windows
作業系統。
pthread主頁。
cocoa threads
cocoa threads (
用nsthread
類實現)
提供了乙個建立和管理執行緒的高階類。
nsthread
內部是採用
posix
執行緒來實現,但是
nsthread
也提供了更多自動管理
posix
執行緒的資料和行為的能力。它同時也會派發
cocoa
通知訊息給應用程式,通知應用程式當前的執行緒狀態。
這個nsthread
類應該在
cocoa
應用程式或其它使用
foundation framework
的程式優先使用。
nsthread
物件的效能非常好,雖然一些額外的開銷使得它比
posix
執行緒慢。但在大部分的情況下,這些開銷是可以忽略不計的。
更多關於建立
cocoa
執行緒和使用
nsthread
類,請參照。
carbon multiprocessing services 在
carbon
應用程式中,
carbon multiprocessing services
是作為搶先式執行緒的管理
api。這個模型是建立在
mac os 9
的mp task api
之上,建立
mp task api
只是carbon
執行緒管理的折中模型。使用
multiprocessing services api
,乙個應用程式可以在多處理機器上執行搶先式的執行緒,同時具有並行執行能力。
對於carbon
應用程式,
multiprocessing services
是建立執行緒的首選。這些
api建立搶先式執行緒與
posix
執行緒和nsthread
類是差不多的。而且,這個
api也提供了一些更強的功能,如執行緒的同步,通知,定時,遠端呼叫,異常處理,
semaphores
和臨界標記。
更多關於使用
multiprocessing services api
資訊,請參照. 和
。
carbon thread manager
carbon thread manager
是乙個歷史遺留的
api,主要作用是為了
carbon
應用程式管理一系列輔助線程。不像搶先式執行緒,這裡的每個執行緒的執行依賴與其它執行緒,指定的時間內只有乙個應用程式的輔助線程可以在執行。執行緒由乙個叫
round-robin manner
選擇,當它們收到核心的通知執行的時候,你可以把這些輔助線程看成是乙個組。收到核心通知的時候這個組中只能有乙個被啟用的執行緒可以執行,其它執行緒進入休眠狀態一直要等到執行執行緒進入到休眠。
注意:
我們不建議現在還用
carbon
執行緒管理來進行執行緒開發。這些
api只要為了那些把他們的應用程式轉到
mac os x
,同時那些**還需要輔助線程。假如你現在正在寫乙個新的
carbon
應用程式,必須要用
posix
執行緒或multiprocessing services api
來替換。
Libnids開發包介紹
libnids開發包介紹 libnids是乙個用於網路入侵檢測開發的專業程式設計介面,它使用了libpcap所以它具有捕獲資料報的功能。同時,libnids提供了tcp資料流重組功能,所以對於分析基於tcp協議的各種協議libnids都能勝任.libnids還提供了對ip分片進行重組的功能,以及埠掃...
1 12 在Mac OS上安裝Go語言開發包
go version go1.13.4 darwin amd64設定 gopath 環境變數 開始寫 go 專案 之前,需要我們先配置好環境變數。編輯 bash profile 在終端中執行 vi bash profile 即可 來新增下面這行 如果你找不到 bash profile,那自己建立乙個...
Detour開發包介紹 2 使用
一般來說,使用detours 的 都具有固定的模式。detours 1.5 和 detours 2.1 的介面函式變了很多,這裡按照 2.1 版本對基本的使用方法進行說明。常用的函式有下面幾個 detourtransactionbegin 開始一次 截獲 或者 解除截獲 過程。detourupdat...