基本概念
- 进程: 一个具有一定独立功能的程序关于某个数据集合的一次运行活动。可以理解成一个运行中的应用程序。
- 线程(thread): 程序执行流的最小单元,线程是进程中的一个实体。
- 同步: 只能在
当前线程
按先后顺序依次执行,不开启新线程。 - 异步: 可以在
当前线程
开启多个新线程执行,可不按顺序执行。 - 队列(queue):
装载线程任务
的队形结构。 - 并发:
线程执行
可以同时一起进行执行。 - 串行:
线程执行
只能依次逐一先后有序的执行。 - 操作(Operation):
单词:
Invoke:vt. 调用;祈求;恳求;引起
concurrency: n. 并发(性) ;全部现在
注意:
- 一个进程可有多个线程。
- 一个进程可有多个队列。
- 队列可分并发队列和串行队列。
线程的属性
NSThread *currentThread;
NSMutableDictionary *threadDictionary;
double threadPriority
NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0); // read-only after the thread is started
NSString *name
NSUInteger stackSize
BOOL isMainThread
NSThread *mainThread
BOOL executing
BOOL finished
BOOL cancelled
执行分类
-
异步执行、同步执行
队列分类
-
串行队列、并发队列
通过dispatch_queue_create函数来创建队列,参数一是一个C语言的字符串,是队列的标签,也就是名称,参数二是指定串行队列还是并发队列。
创建串行队列传:DISPATCH_QUEUE_SERIAL(也就是NULL)
创建并发队列传:DISPATCH_QUEUE_CONCURRENT
// 创建串行队列
dispatch_queue_t serialQueue = dispatch_queue_create("serial_queue", DISPATCH_QUEUE_SERIAL);
// 到队列中异步执行
dispatch_async(serialQueue, ^{
NSLog(@"serialQueue");
});
// 创建并发队列
dispatch_queue_t concurrencyQueue = dispatch_queue_create("concurrency_queue", DISPATCH_QUEUE_CONCURRENT);
// 到队列中异步执行
dispatch_async(concurrencyQueue, ^{
NSLog(@"concurrency_queue");
});
队列举例
1. 全局队列
苹果预定义的全局并发队列,只能通过苹果提供的API来获取,可以设置优先级。由整个进程共享。进程中存在三个全局队列:高、中(默认)、低三个优先级队列。可以调用dispatch_get_global_queue函数传入优先级来访问队列
@param identifier 优先级 默认成0
@param flags 0
// 到并发队列中异步地执行:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"async global");
});
2. 主队列
主队列是应用程序启动时,由系统预先创建的,与主线程相关联的队列。我们只能通过系统API来获取主队列,不能手动创建它。下面我们来看看主队列这个串行队列的执行顺序如何:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"async main");
});
参考
GCD 同步与异步 串行与并行
谈iOS多线程(NSThread、NSOperation、GCD)编程
GCD串行并发队列
网友评论