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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342