多线程(一)
2019-12-24 本文已影响0人
没戏还在演戏
1.进程
- 一个APP应用就是一个进程
- iOS是单进程,安卓可以多进程
- 一个进程内可以有多个线程
2.多线程
优点:
- 能适当提高程序的执行效率
- 能适当提高资源利用率(CPU,内存)
- 线程上的任务执行完成后,线程会自动销毁
缺点:
- 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
- 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
- 线程越多,CPU在调用线程上的开销就越大
- 程序设计更加复杂,比如线程间的通信、多线程的数据共享
3.线程的生命周期
线程的生命周期.png
就绪 -> 运行
运行 -> 就绪
线程之间的切换
多核就是并发
线程不能start 两次
4. 锁
锁性能图.png
推荐使用NSLock
偷懒用@synchronized
美滋滋
- 自旋锁
一个完成 下一个直接进去- 互斥锁
如果发现前面有线程在执行,就休眠
5.栅栏函数
他能够保证顺序执行,并保证线程安全
注意点:
- 栅栏函数一定要是自定义的并发队列,不能使用dispatch_get_global_queue(全局并发队列)
- 必须要求都在一个自定义队列里
- 不利于封装
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//AFN自有队列 -- @"com.almofire.cn.session"
[self.manager request1];
});
//AFN内有自己的队列 所以这里栅栏函数无效
dispatch_barrier_async(dispatch_get_global_queue(0, 0), ^{
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self.manager request2];
});
6.队列图
队列图.png