美文网首页
OC的多线程1————关键词 以及 解决方案

OC的多线程1————关键词 以及 解决方案

作者: silence_xz | 来源:发表于2019-05-28 16:51 被阅读0次

多线程知识梳理,通过了解多线程有关关键词,可以更好地方便了解多线程 ;稍后了解多线程的几种 解决方案 。

1.关键词: 进程、 线程;队列、任务;主线程、主队列、全局队列;同步、异步,多线程,线程锁,栅栏函数,信号量;and so on.

进程:狭义上讲,是系统中正在运行的一个程序。

  • 广义上讲,是一个拥有独立功能的程序关于某个数据集合上一次运行活动。

线程:进程中执行的每一个任务都是一个线程。线程是进程中执行运算的最小单位。

  • 主线程,每个进程默认都会开启一个线程,这个线程就是主线程。

  • 多线程,一个进程中的多个任务,有多个线程去执行的情况。比如:我们使用音乐播放器,在听歌曲的同时下载音乐以及进行搜索。

任务:也就是一段代码块的集合,在GCD中就是一个block。任务按照执行方式划分,有同步任务(sync)、异步任务(async),主要的区别是否堵塞当前线程,是否创建新的线程。

  • 同步任务,在前一个任务执行完成之后,才能执行下一个任务。不会创建新的线程,会堵塞当前线程。

  • 异步任务,无需等待前一个任务执行完成,可以直接执行下一个任务,根据需要创建新的线程,不会堵塞当前线程。

队列:用于存放任务,是一系列任务的集合,决定任务的执行顺序,是并行还是串行?

  • 并行队列,多个线程同时执行多个任务的情况。PS: 开启多条线程,执行多条下载任务,假定同时执行,在时间上是重叠的。


    并行队列使用多个线程.png
    并行队列同时执行多个任务.png
  • 串行队列,主要针对于单个线程中(一个串行队列有且只有一个线程),任务依次执行的情况。PS:我们下载多个文件时,按照队列FIFO(先进先出)的顺序,任务A执行完成之后,再执行任务B,依次执行任务C。


    串行队列使用1个线程.png
    串行对象执行任务顺序.png
  • 主队列,负责调度主线程上的任务,没办法开启新的线程,任务都是顺序执行。主队列也就是我们UI所在的队列,我将断点放在viewLoad中,不难发现,系统除了默认给我们创建一个主线程外,还创建了一个Queue(serial)串行队列,我们在ViewContoller平时所在的操作,大部分就在这个队列中执行。


    图片.png
    图片.png
  • 全局队列,本质上是一个并发队列,无需我们创建可以直接使用。可以设置优先级。

线程锁:多个线程访问时,采用了加锁机制对数据进行保护,防止多个线程同时访问一个数据,造成数据不正确,相互污染的情况。

栅栏函数:就像一道栅栏一样将任务隔开,栅栏函数之前的任务完成之后,再执行栅栏之后的任务。

信号量semaphore:是一种用来控制访问资源的数量标识。即告诉系统按照我们设定的信号量来创建线程的个数。

PS: 队列的执行顺序(并行/串行)与 是否创建新的线程无关。是否创建新的线程与任务的执行方式(同步/异步)有关系。


2.多线程实现的几种方案,主要包括pthread、NSThread、GCD、NSOperation。PS:其中pthread和NSThread需要我们管理生命周期,不是很常用,我们重点关注GCD和NSOperation。

方案 简介 语言 优点 缺点 使用频率
pthread 一套通用的多线程跨平台解决方案,适用于Linux、Unix、Max OS C 跨平台、可移植 使用难度大,需要程序员控制生命周期
NSThread 苹果公司封装,更加面向对象,可以直接操作线程对象 OC 操作简单 需要程序员管理生命周期
GCD(Grand Central Dispatch) 旨在替代NSThread的,充分利用设备的多核处理器的方案 C 1.自动管理生命周期。2.GCD主要与block结合使用,代码简洁高效。3.更接近于底层,速度更快 需要很多代码实现一些实用功能,比如设置任务的优先级
NSOperation 基于GCD,又提供了更多简单实用的功能,更加面向对象 OC 1.比GCD简单易用,更加易读。2.可以方便管理并发、NSOperation之间的优先级 简单任务,代码量比GCD多

PS:参考文档,感谢下面作者的辛勤耕耘。
1.5个步骤,教你瞬间明白线程和线程安全
2.iOS开发的中的多线程 --- GCD

相关文章

  • OC的多线程1————关键词 以及 解决方案

    多线程知识梳理,通过了解多线程有关关键词,可以更好地方便了解多线程 ;稍后了解多线程的几种 解决方案 。 1.关键...

  • swift中的"互斥锁"

    前言 脱产学习swift中, 从多线程开始, 遇到了类似于oc中的多线程资源抢夺问题..oc中的解决方案是利用 "...

  • 中级09 - Java多线程初步

    中级09 - Java多线程初步 介绍多线程带来的问题,以及基本解决方案。 竞争条件带来的数据错误问题 死锁的原...

  • OC多线程GCD以及NSoperation

    首先讲一下关于线程的基础知识。 1.什么是进程? 进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个...

  • iOS多线程

    OC中的多线程 OC中多线程根据封装程度可以分为三个:NSThread、GCD和NSOperation,本文主要讲...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • IOS知识总结——多线程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

  • iOS多线程编程

    OC中的多线程 OC中多线程根据封装程度可以分为三个层次:NSThread、GCD和NSOperation,另外由...

网友评论

      本文标题:OC的多线程1————关键词 以及 解决方案

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