iOS开发--多线程的串行, 并行; 同步, 异步理解

前言

多线程在iOS开发的过程中是十分常见的操作, 其中, 将任务放到子线程操作, 避免对主线程造成阻塞影响是最为常见的原因.
多线程的概念就不赘述了, 下面对串行, 并行; 同步, 异步的概念做二维对比解释.

写在前面:

说实话, 刚接触的时候, 对这四个概念着实头疼, 不好做区分, 总是混为一谈. 于是, 采用多方对比就会好理解一些.

我理解的单元任务分为三个阶段:

  • 创建任务
  • 将任务放到线程中执行
  • 任务完成

下面, 我们做一个二维表格

线程同步异步对比
串行在主线程操作, 任务一次执行, 执行完成后, 在执行主线程的内容创建一个新的子线程, 所有任务在子线程操作, 线程内容的任务依次执行, 子线程和主线程的内容同时执行.是否阻塞主线程
并行在主线程操作, 主线程任务等待, 所有任务同时创建, 但是在此队列中, 任务执行为依次执行, 没有轮到的任务处于等待状态, 执行完成后, 执行主线程内容创建多条线程(未必有多少任务创建多少线程, 有点像cell的复用), 按顺序创建任务, 同时执行, 同时, 主线程任务正常执行.1. 是否阻塞主线程
2.任务的执行时间是否统一
1. 主线程阻塞等待
2. 任务的创建和执行时间点
1. 主线程异步执行, 不阻塞.
2. 任务的创建和执行时间点

如果, 上面的概念不好理解, 那么我们…

在这里插入图片描述

用手机打电话
任务单元:
  1. 存手机号(创建任务)
  2. 打电话(执行任务)
  3. 挂电话(任务完成)
    在这里插入图片描述
    在这里插入图片描述
素材

iPhone(主线程)
在这里插入图片描述

主要任务

需要用iPhone执行给老师打电话的任务
在这里插入图片描述

紧急任务

通知每个学生明天不要上学, 在家学习
给学生打电话

四种不同组合的情况
  1. 串行同步:

    只有一部iPhone, 根据通讯录列表, 依次存学生手机号, 给学生打完电话, 打完电话, 再存下一个…最后再给老师打电话
    在这里插入图片描述

  2. 串行异步:

    我再买一部华为Meta Pro, 用iPhone执行给老师打电话任务, 同时 用华为Meta Pro执行给所有学生依次打电话任务.
    在这里插入图片描述

  3. 并行同步:

    只有一部iPhone, 我先将所有学生的电话存到通讯录中, 然后依次给每个学生打电话, 最后, 我再执行给老师打电话的任务
    请添加图片描述

  4. 并行异步:

    执行给老师打电话任务, 同时, 执行给每个学生打电话的任务
    在这里插入图片描述

写在后面

多线程的有点很明显, 更何况现在是多核的天下, 可以将多线程的性能最大化, 但是, 也是有缺点, 过度的使用多线程同样会造成CPU的压力倍增.
所以, 从实际角度出发, 多线程可以解决大部分卡顿问题, 但是也会造成卡顿, 我们可以在适当的时候给予用户等待的动画, 做到更好的交互.

概念性的东西实在不好理解, 如果文章中有错误地方, 还望指出.

图片素材来自网络, 如有侵权, 联系我删除.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值