GCD、NSOperation、NSThread
1.GCD
重要概念:
1. 『任务』
-
同步执行(sync):
- 同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等待,直到队列里面的任务完成之后再继续执行。
- 只能在当前线程中执行任务,不具备开启新线程的能力。
-
异步执行(async):
- 异步添加任务到指定的队列中,它不会做任何等待,可以继续执行任务。
- 可以在新的线程中执行任务,具备开启新线程的能力。
2. 『队列』
-
串行队列(Serial Dispatch Queue):
- 每次只有一个任务被执行。让任务一个接着一个地执行。(只开启一个线程,一个任务执行完毕后,再执行下一个任务)
-
并发队列(Concurrent Dispatch Queue):
- 可以让多个任务并发(同时)执行。(可以开启多个线程,并且同时执行任务)
多线程-GCD.png注意:并发队列 的并发功能只有在 异步(
dispatch_async
)方法下才有效。
2.NSOpreation
参考地址:iOS 多线程:『NSOperation、NSOperationQueue』详尽总结
重要概念:
1. 『操作(Operation)』
-
操作(Operation):
- 执行操作的意思,换句话说就是你在线程中执行的那段代码。
- 在
GCD
中是放在block
中的。在NSOperation
中,我们使用NSOperation
子类NSInvocationOperation
、NSBlockOperation
,或者自定义子类来封装操作。
2.『 操作队列 (Operation queue)』
-
操作队列(Operation Queues):
- 这里的队列指操作队列,即用来存放操作的队列。不同于
GCD
中的调度队列FIFO
(先进先出)的原则。NSOperationQueue
对于添加到队列中的操作,首先进入准备就绪的状态(就绪状态取决于操作之间的依赖关系),然后进入就绪状态的操作的开始执行顺序(非结束执行顺序)由操作之间相对的优先级决定(优先级是操作对象自身的属性)。 - 操作队列通过设置最大并发操作数(
maxConcurrentOperationCount
)来控制并发、串行。 -
NSOperationQueue
为我们提供了两种不同类型的队列:主队列和自定义队列。主队列运行在主线程之上,而自定义队列在后台执行。
- 这里的队列指操作队列,即用来存放操作的队列。不同于
3. NSThread
多线程-NSThread.png4. 总结概览
iOS-多线程.png注解(自己的理解):
NSThread
:之所以称之为 “完全的多线程编程 ” ,是因为NSThread
针对的操作对象是线程。NSOpreation
:淡化线程的直接操作。可以理解为NSOpreation
的操作对象为队列。NSOpreation
对线程的操作非常少。GCD
:GCD
相比NSThread
多了队列的概念,相比NSOperation
多了对线程的控制。所以说GCD
处于NSThread
和NSOpreation
之间。
至此文章结束。如同学们发现错误,请多指教 🤝 。
网友评论