美文网首页
iOS中的多线程小记

iOS中的多线程小记

作者: 野猪哥123 | 来源:发表于2018-08-31 18:39 被阅读38次

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资源紧张,单核处理器

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

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

相关文章

  • iOS中的多线程小记

    1.多线程方案有哪几种? (1).pthread 一套通用的多线程API;适用于Unix/Linux/Win...

  • iOS中的多线程

    iOS中的多线程 现存的iOS多线程解决方案 现在在iOS中要实现多线程有如下四种方法。 PthreadsNSTh...

  • 多线程系列

    --------------------多线程-------------------- 你理解的多线程? iOS中...

  • iOS 多线程

    参考资料:iOS多线程iOS GCD 多线程问题在iOS中目前有4套多线程方案,他们分别是: PthreadsNS...

  • iOS开发进阶-多线程技术

    iOS中多线程 首先看一道面试题 iOS中多线程有哪些实现方案? iOS中,多线程一般有三种方案GCD、NSOpe...

  • iOS-多线程知识点整理

    iOS中多线程 首先看一道面试题 iOS中多线程有哪些实现方案? iOS中,多线程一般有三种方案GCD、NSOpe...

  • iOS多线程--并行开发一

    iOS多线程--并行开发二 重点分析iOS多线程开发:iOS多线程:在iOS中每个进程启动后都会建立一个主线程(U...

  • IOS多线程二 NSThread简约而不简单

    IOS多线程二NSThread简约而不简单 今天就来着手教大家在IOS中简单的实现多线程。IOS实现多线程的方式有...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • iOS开发知识点总结(一)

    1.iOS中的多线程 iOS中的多线程,是Cocoa框架下的多线程,通过Cocoa的封装,可以让我们更方便的使用线...

网友评论

      本文标题:iOS中的多线程小记

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