参考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];