Take a look
l 多线程技术
线程 进程 任务
l 线程替代技术
1. Operation object
2. GCD
3. Notifications (空闲时段执行)
4. 异步方法
5. Timers
6. 分离式进程
l 线程支持
coacoa threads NSThread
POSIX threads 基于c的多线程
Multiprocessing Services 废了,不用
l 线程间通讯
1. 直接消息之
2. 全局共享对象与实例
3. 条件(Conditions) -- 锁之类
4. Run loop sources -- 等待别人的消息,算通讯
5. Ports and sockets --- 基于run loop
6. 消息查询
7. 分布式对象
l 设计技巧/注意事项
1. 避免显式创建 ----- 能坐着就不要站着
2. 保证合理繁忙
3. 避免共享数据结构
4. 用于用户界面….
5. 注意退出时的行为 (分离可选)
6. 处理异常
7. 干净的终止(资源释放)
8. 线程安全
线程管理
线程开销
l 核心数据结构 --- 1kb
l 栈空间 --- 二级线程512KB,一级8MB/1MB
l 创建时间 --- 90毫秒
创建线程
l NSThread : 参考SDK文档
l POSIX Threads:
l NSObject自带支持
l 其他… 例如MultiprocessingServices
l 在cocoa中使用POSIX线程 --- 主要用于不想改写现有C代码
注意事项:
Cocoa的单线程程序默认情况下没有开启多线程必须的一些措施,当使用NSThread的时候才开启,所以在使用POSIX的时候要确保调用一次NSThread(即使什么也不做),可以首先检测一下是否开启了. 搞不好要崩溃.isMultiThreaded
关于锁…. 可以混合使用,但是要用在自己对应的线程种类.
配置线程
l 设置线程栈
l 设置分离状态 --- 非分离线程不可强制退出,在程序写文件而要退出的时候有很好的保护
l 设置优先级
入口程序:
l 自动释放池
l 异常处理
l 设置运行循环(runloop)
中止线程
cancle 只是改变自身的一个标记而exit可以直接终止代码
Run Loops
说明: Run loop的用法:run loop内建于线程,为了保证线程不即时退出,并且需要和外界频繁带交互,一次run loop带执行将会调用所有的源,说穿了,玩转run loop就是配置他的源,包括基于端口的输入,自定义输入,定时器。对于交互不是很频繁并且处理量大的程序块,慎用!
Run Loops解析
何时使用Run Loop
线程同步
同步工具
1. 原子操作
2. 内存屏障和Volatile变量
3. 锁
4. 条件
5. 执行selector例程
同步开销于性能
线程安全和信号量
线程安全设计的技巧
1. 避免完全同步
2. 了解同步的限制
3. 确保线程代码的正确
4. 注意死锁和活锁
5. 正确使用Volatile变量
使用原子操作
使用锁
l POSIX Mutex Lock
l NSLock
l @synchronized
l Using Other Cocoa Locks
n NSRecursiveLock
n NSConditionLock
n NSDistributedLock
条件
l NSCondition
l POSIX 条件