美文网首页
同步、异步与串行、并发

同步、异步与串行、并发

作者: ReidWang | 来源:发表于2016-11-21 15:00 被阅读104次

1、同步、异步描述的是当前线程或代码流是否要阻塞以等待加入队列的任务执行完毕;同步要阻塞当前线程,异步不会阻塞当前线程。queue 为任务队列

dispatch_sync(queue, ^{...}) -> 同步,阻塞,等 queue 里的任务 “...” 执行完成后才会向下执行;

dispatch_async(queue, ^{...}) -> 异步,不阻塞,会开辟新的线程执行 queue 里的任务 “...”;

2、queue 表示队列,根据队列中多个任务的执行顺序不同,分为串行队列和并行队列;串行队列是指队列中的任务是一个接一个的按加入队列的顺序执行的,前面的任务执行完毕后才能执行其后面的任务;并发队列是指队列中的任务可以并发地执行。

2.1、创建串行队列的方法是:

dispatch_queue_t seririalQueue = dispatch_queue_create("queueName", DISPATCH_QUEUE_SERIAL);

同时主线程的队列也是串行队列,获取方法是:

dispatch_queue_t mainQueue = dispatch_get_main_queue();

2.2、创建并发队列的方法是:

dispatch_queue_t concurrentQueue = dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT);

同时系统提供了获取系统并发队列的函数:

dispatch_queue_t queue = dispatch_get_global_queue(long identifier, unsigned long flags);

identifier 的值可以为:

DISPATCH_QUEUE_PRIORITY_HIGH

DISPATCH_QUEUE_PRIORITY_DEFAULT

DISPATCH_QUEUE_PRIORITY_LOW

DISPATCH_QUEUE_PRIORITY_BACKGROUND

四个参数值获取的并发队列优先级依次从高到底;第二个参数 flags 为系统保留参数,传入 0 即可。

2.3、串行和并发描述的是队列里各个任务是否可以并发执行;串行队列里的任务不能并发执行,只能一个接一个地执行,同一时刻该串行队列里的任务最多只有一个在执行;并发队列里的后面的任务不必等待前面的任务执行完毕再执行,可以多个同时执行,同一时刻该并行队列里的任务可以有多个正在执行。

3、比较与分析

同步串行队列 :不会创建新线程,在主线程里按照先后顺序执行(⚠️ 当串行队列为dispatch_get_main_queue()时,使用同步串行队列会造成死锁,当为自己创建的串行队列时,不会造成死锁)

同步并发队列:不会创建新线程,在主线程里按照先后顺序执行

异步串行队列:会创建新线程,新线程里的任务会按照先后顺序执行

异步并发队列:会创建新线程,新线程里的任务会同时执行

4、并发与并行 Concurrency vc Parallelism

并发和并行并不相同,并发代码的不同部分可以“同步”执行。然而,该怎样发生或是否发生都取决于系统。多核设备通过并行来同时执行多个线程;然而为了使单核设备也能实现这一点,它们必须先运行一个线程,执行一个上下文切换,然后运行另一个线程或进程。这通常发生的足够快以致给我们并发执行的错觉,并行要求并发,但并发并不能保证并行。(摘抄自GCD 介绍


示例代码

相关文章

  • 多线程处理(问题使用方法)

    一、同步与异步、串行与并发: 首先我们要明白:什么是同步、异步?什么是并发、串行?同步、异步是提交任务的一种方式,...

  • ios GCD概述

    GCD 容易混淆的术语 同步/异步/并发/串行 同步和异步: 决定要不要开启新的线程 并发与串行 决定了任务的执行...

  • 第九篇:Objective-C 知识回顾多线程

    9.1.同步/异步 和 串行/并发 问题一:同步/异步 和 串行/并发组合有哪些? dispatch_sync(s...

  • GCD的几种创建方式及基本使用

    同步函数 同步函数+主队列 同步函数+串行队列 同步函数+并发队列 异步函数 异步函数+主队列 异步函数+串行队列...

  • 多线程GCD笔记

    同步函数 + 主队列 异步函数 + 主队列 同步函数 + 串行队列 异步函数 + 串行队列 同步函数 + 并发队列...

  • GCD 死锁

    GCD死锁 同步 异步 串行 并发

  • 关于GCD总结

    什么是GCD 理解串行、并发及同步异步 串行和并发 同步和异步 队列 串行队列 两者等效.2)使用主队列(在主队列...

  • iOS面试8 - 多线程

    GCD 同步异步, 串行并发同步串行: dispatch_sync(serial_queue, ^{ // wor...

  • iOS多线程(一)

    1.常见术语 --- 同步、异步、并发、串行 1.1同步和异步主要影响:能不能开启新的线程 1.2并发和串行...

  • 多线程的运用

    同步串行队列 同步并发队列 异步串行队列 异步并发队列 队列组 栅栏 队列组和栅栏的组合 信号量 死锁主线程 分析...

网友评论

      本文标题:同步、异步与串行、并发

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