參考Cocoa文檔Threading Programming Guide多線程
1,建立線程的方式分佈式
- NSThread
- 直接建立線程的接口 + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument。
-
- Create a new NSThread object and call its start method或者Override NSThread's main method using subclassing。
- 若是有了NSThread的Obj,能夠使用NSOject的performSelector:onThread:withObject:waitUntilDone:方法執行任務,但前提的這個Thread必須有RunLoop。
- POSIX API
- NSObject
- performSelectorInBackground:withObject:
2,線程同步的工具ide
優勢是不會阻塞線程執行,性能好。缺點是隻能對簡單的數據類型使用。工具
能夠使用鎖來保護一段代碼的關鍵區,在同一時間只能有一個線程進入關鍵區,一般關鍵區在操做一些多線程共享的資源。oop
-
- 互斥鎖(mutex)
- NSLock 兩個有用的方法:trylock lockBeforeDate
-
@synchronized(obj)性能
- 遞歸鎖(recursive lock)同一個線程能夠獲取屢次,但只有當鎖爲0時另一個線程才能得到。
- 讀寫鎖(read-write lock)當讀操做不少但寫操做不多的能提升性能。只在POSIX線程中支持。
- 分佈式鎖(distributed lock)進程級別的鎖,只報告狀態,不阻塞進程。
- NSDistributedLock 使用文件系統實現。
- 條件鎖(NSConditionLock)
條件是一種特別的鎖,它用來保證操做執行的順序ui
[cocoaCondition lock];
while (timeToDoWork <= 0)
[cocoaCondition wait];
timeToDoWork--;
// Do real work here.
[cocoaCondition unlock];
[cocoaCondition lock];
timeToDoWork++;
[cocoaCondition signal];
[cocoaCondition unlock];