美文网首页
多线程之基础

多线程之基础

作者: 简洁的想法 | 来源:发表于2017-06-27 14:04 被阅读4次

基本概念

  1. 进程: 一个具有一定独立功能的程序关于某个数据集合的一次运行活动。可以理解成一个运行中的应用程序。
  2. 线程(thread): 程序执行流的最小单元,线程是进程中的一个实体。
  3. 同步: 只能在当前线程按先后顺序依次执行,不开启新线程。
  4. 异步: 可以在当前线程开启多个新线程执行,可不按顺序执行。
  5. 队列(queue): 装载线程任务的队形结构。
  6. 并发: 线程执行可以同时一起进行执行。
  7. 串行: 线程执行只能依次逐一先后有序的执行。
  8. 操作(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串行并发队列

相关文章

网友评论

      本文标题:多线程之基础

      本文链接:https://www.haomeiwen.com/subject/cnojbttx.html