多线程

作者: 东方奇迹 | 来源:发表于2020-10-22 12:56 被阅读0次
截屏2020-10-22 下午12.55.43.png 截屏2020-10-22 下午1.00.11.png 截屏2020-10-22 下午1.00.42.png 截屏2020-10-22 下午1.01.54.png 截屏2020-10-22 下午1.02.20.png 截屏2020-10-22 下午1.15.58.png 截屏2020-10-23 上午11.41.47.png 截屏2020-10-23 上午11.42.41.png 截屏2020-10-23 上午11.44.48.png 截屏2020-10-23 上午11.50.44.png 截屏2020-10-23 下午12.14.08.png 截屏2020-10-23 下午12.18.44.png 截屏2020-10-23 下午12.23.43.png 截屏2020-10-23 下午12.26.26.png 截屏2020-10-23 下午12.27.07.png 截屏2020-10-23 下午12.34.09.png 截屏2020-10-23 下午12.42.08.png 截屏2020-10-23 下午12.45.39.png 截屏2020-10-27 下午12.16.52.png 截屏2020-10-27 下午12.28.00.png 截屏2020-10-26 下午7.03.44.png 截屏2020-10-23 下午12.55.39.png 截屏2020-10-23 下午1.17.37.png 截屏2020-10-26 下午7.04.57.png 截屏2020-10-26 下午8.02.18.png 截屏2020-10-26 下午8.45.03.png 截屏2020-10-26 下午9.06.25.png 截屏2020-10-26 下午9.20.29.png 截屏2020-10-27 上午10.47.16.png 截屏2020-10-27 上午11.06.35.png 截屏2020-10-27 上午11.17.46.png 截屏2020-10-27 上午11.24.03.png 截屏2020-10-27 下午12.21.29.png 截屏2020-10-27 上午11.37.36.png 截屏2020-10-27 下午1.28.18.png 截屏2020-10-27 下午2.34.14.png 截屏2020-10-27 下午2.33.52.png 截屏2020-10-27 下午2.37.38.png 截屏2020-10-27 下午3.04.49.png 截屏2020-10-27 下午3.10.24.png

1、你理解的多线程(什么是多线程、多线程的原理、多线程的优缺点)?

首先多线程就是在一个进程里面开启了多条线程同时执行任务。但是多线程只是一个假象,同一时间CPU只能处理1条线程,多线程并发其实就是CPU快速的在多条线程之间切换,给人的感觉好像是多条线程同时执行任务。

  • 优点:
    1、防止线程阻塞、增加运行效率
    2、提高资源利用率(CPU、内存利用率)

  • 缺点:
    1、占空间(默认情况下,主线程占用1M,子线程占用512KB)、花时间(创建线程大约需要90毫秒的创建时间)
    2、如果开启大量的线程,会降低程序的性能(消耗大量的CPU资源,CPU会在N多条线程之间调度,每条线程被调度执行的频次会降低),(建议3-5条线程,推荐3条)
    3、程序设计复杂(线程之间的通信、多线程的数据共享)

2、iOS的多线程方案有哪几种?你更倾向于哪一种?

3532634-5b5c9c9dd3d33a80.jpg

3、你在项目中用过GCD吗,都在哪里用的?

1)GCD一次性代码dispatch_once
2)GCD延迟函数dispatch_after
3)GCD快速迭代dispatch_apply(没用过)
4)GCD栅栏函数dispatch_barrier_async(没用过)
5)队列组
6)定时器
7)多线程(想想)

4、说一下NSOperation和GCD的区别?以及各自的优势?

1)GCD是纯C语言API,而操作队列是OC的对象;
2)GCD中任务用block块来表示,而块是个轻量级的数据结构;NSOperation则是个更加重量级的OC对象;
3)具体该使用GCD还是使用NSOperation需要看具体的情况;

NSOperation和NSOperationQueue的好处有:
1)NSOperationQueue可以挂起(暂停/恢复)和取消某个操作,而GCD中的任务是无法被取消的(安排好任务之后就不管了)。
2)NSOperation可以通过KVO提供对NSOperation对象的精细控制(如监听当前操作是否正在执行、是否被取消、是否已经完成等)。
3)NSOperation可以方便的指定操作间的依赖关系。
4)NSOperation可以方便的指定操作间的优先级(操做优先级表示此操做与队列中其它操作之间的优先关系,优先级高的操作先执行,优先级低的操作后执行)。
5)通过自定义NSOperation的子类可以实现操做重用。

5、线程安全处理的手段有哪些?

  • 1、OSSpinLock:
    叫做“自旋锁”,等待锁的线程会处于忙等状态,一直占用着CPU资源;
    目前已经不再安全,可能会出现优先级反转问题;

  • 2、os_unfair_lock:
    用于取代不安全的OSSpinLock,从iOS10开始支持,等待锁的线程处于休眠状态;

  • 3、Pthread_mutex:
    互斥锁,等待锁的线程会处于休眠状态;

  • 4、NSLock:
    是对mutex普通锁的封装;

  • 5、NSRecursiveLock:
    是对mutex递归锁的封装;

  • 6、NSCondition:
    是对mutex的条件的封装;

  • 7、NSConditionLock:
    是对NSCondition的进一步封装,可以设置具体的条件值;

  • 8、dispatch_queue:
    直接使用GCD的串行队列,也是可以实现线程同步的;

  • 9、dispatch_semaphore:
    semaphore叫做“信号量”,信号量的初始值可以用来控制线程并发访问的最大数量;信号量的初始值为1,代表同时只允许1条线程访问资源,保证线程同步;

  • 10、@synchronized:
    是对mutex递归锁的封装;
    @synchronized(obj)内部会生成obj对应的递归锁,然后进行加锁解锁操做;

注意:性能排序前四名
第一:os_unfair_lock(iOS10推出低版本不支持)
第二:OSSpinLock(存在优先级反转问题)
第三:dispatch_semaphore
第四:pthread_mutex

6、atomic关键字?

  • atomic保证了属性setter、getter的原子性操作,相当于setter和getter内部加了线程同步的锁。
  • 它并不能保证使用属性的过程是线程安全的。

7、多线程的读写安全?

  • 1、pthread_rwlock:读写锁
  • 2、dispatch_barrier_async:异步栅栏调用

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

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