1. 创建线程的平均开销:
内存堆栈: 主线程—— 1M , 子线程——512K
时间: 基本可以忽略不计
2. 创建线程的多元宵祝福网页 种方法:
NSThread, POSIX(基于C语言支持的API), NSObject的performSelector
3. 在工程没有使用ARC时,线程执行体代码中创建自动释放池
4. 为了线程安全,尽量避免在线程中使用共享的数据结构
5. runloop: 线程中的一个事件处理循环,用来不停的调度工作以及处理输入事件.
每一个线程都有自己的runloop, 主线程是默认开启的,子线程是需要手动开启。
runloop监视每个输入源,处理事件,如果没有事件,runloop休眠,不消耗CPU资源
需要使用runloop的四种情况:
a.使用端口或自定义输入源和其他线程通信
b.子线程中使用了定时器
c.cocoa中使用任何performSelector到了线程中运行方法
d.使线程履行周期性任务
在子线程中用了NSURLConnection异步请求,那也需要用到runloop,不然线程退出了,相应的delegate方法就不能触发。
6. 线程同步: a. 原子操作
b. 内存屏障和volatile变量
内存屏障: 确保内存操作按照正确顺序工作的非阻塞同步工具
volatile : 一般编译器会优化代码通过加载这些变量的值进入寄存器。 对于线程之间共享的变量,使用volatile强制编译器每次都从内存读取数据,确保数据的同步。
c. 锁: mutex, @synchronized()指令 [1] [2] 下一页
|