iOS中的多线程小记

1.多线程方案有哪几种?

(1).pthread           一套通用的多线程API;适用于Unix/Linux/Windows等系统;跨平台/可移植; 使用难度大

(2)NSThread        基于pthread的OC封装,使用更加面向对象,简单易用,可直接操作线程对象

(3).GCD                一套C语言的API,旨在替代NSThread等多线程技术,充分利用设备的多核

(4).NSOperation   基于GCD的OC封装,使用更加面向对象,同时比GCD多了一些更加简单实用的功能

2.GCD队列类型

串行队列和并发队列两种.

同步函数:

    +串行队列       不会开启新的线程,所有任务在当前线程串行执行

    +并发队列        不会开启新的线程,所以任务在当前线程串行执行

    +主队列            不会开启新的线程,串行执行任务

异步函数:

    +串行队列          会开一条新线程,所有任务在子线程中串行执行

    +并发队列          会开多条线程,所有任务并发执行

    +主队列               不会开新线程,所有任务在主线程串行执行

*注意:使用sync(同步函数)往当前串行队列中添加任务,会卡主当前的串行队列,产生死锁

3.线程安全的处理手段?了解的锁有哪些?

产生线程安全的原因:多个线程同时抢夺同一块资源

1.OSSpinLock(已过时)

自旋锁,等待锁的线程会处于忙等(busy-wait)状态,类似于while循环,一直在占用着CPU的资源

目前已经不再安全,可能出现优先级反转的问题

如果等待锁的优先级比较高,它会一直占用CPU的资源,优先级低的锁就无法释放锁

2.os_unfair_lock

os_unfair_lock用于取代OSSpinLock,从iOS10开始支持,从底层看,等待os_unfair_lock的锁会处于休眠,并非忙等

3.pthread_mutex

互斥锁,等待线程的锁会处于休眠的状态

4.dispatch_semaphore(信号量)

通过设置信号量的初始值,可以用来控制线程的最大并发数量,类似于NSOperationQueue的maxConcurrentOperationCount,来达到避免多个线程抢夺资源的情况

5.dispatch_queue

通过DISPATCH_QUEUE_SERIAL也可以达到同样的效果

6.NSLock

对pthread_mutex普通锁的封装

7.NSRecursiveLock(递归锁)

对pthread_mutex递归锁的封装

8.NSCondition

9.NSConditionLock

10.@synchronized

*注意:基于性能考虑,推荐使用dispatch_semaphore

4.自旋锁和互斥锁的对比?

自旋锁:

    预计线程等待锁的时间比较短

    CPU资源不紧张,多核处理器

    加锁的代码(临界区)经常被调用,但竞争很少发生

互斥锁:

    预计线程等待锁的时间比较长

    CPU资源紧张,单核处理器

    加锁的代码(临界区) 竞争非常激烈

    临界区的代码复杂或者循环量非常大

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

推荐阅读更多精彩内容

  • iOS多线程实践中,常用的就是子线程执行耗时操作,然后回到主线程刷新UI。在iOS中每个进程启动后都会建立一个主线...
    jackyshan阅读 1,437评论 2 12
  • 一.概述 1.基本概念 同步与异步的概念 同步 必须等待当前语句执行完毕,才可以执行下一个语句。 异步 不用等待当...
    Jt_Self阅读 469评论 0 1
  • 前言: 最近想回顾一下多线程问题,看到一篇文章写的非常详细,为了便于以后查找以及加深印象,就照着原文摘录了下文,原...
    FM_0138阅读 932评论 1 1
  • 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知...
    喵渣渣阅读 3,682评论 0 33
  • 写这个计划时,2018年已经过了一半了,不再计划了,现在就开始执行。有想法就及时写出来,就像当年在高中一样,每周至...
    邢玉辉阅读 208评论 0 2