美文网首页
一、多线程的基本概念

一、多线程的基本概念

作者: 流星大石头 | 来源:发表于2017-11-02 14:32 被阅读10次
    一、多线程的基本概念
      1.进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,主要管理资源。
      2.线程:是进程的基本执行单元,一个进程对应多个线程。
      3.主线程:处理UI,所有更新UI的操作都必须放在主线程上执行。不要把耗时操作放在主线程,会卡主界面。
      4.多线程:在同一时刻,一个CPU只能处理一条线程,但CPU可以在多条线程之间快速的切换,只要切换的时间足够快,就造成了多线程一同执行的假象。
      5. 线程就像火车的一节车厢,进程则是火车。车厢(线程)离开火车(进程)是无法跑动的,而火车(进程)至少有一节车厢(主线程)。多线程可以看做多个车厢,它的出现是为了提高效率。
      6.多线程是通过提高资源使用率来提高系统总体的效率。
      7.我们运用多线程的目的是:将耗时的操作放在后台执行!
      8.串行和并发:
        串行的意思是在多个任务下,每次只会有一个任务被执行,并发的意思是同一时间多个任务同时发生。并发是一种现象,解决并发现象的技术,叫做并行。
        我们经常说的多线程编程,说的就是并行技术,可以让多个CPU同时执行,加快执行速度,提高执行效率。
      9.同步和异步:
        同步的意思是在多任务中,一个任务只能等待另一个任务完成之后,他才可以进行,而异步的意思是一个任务的执行,不需要等待上一个任务的执行,不会发生堵塞。
      10.死锁:
        死锁就是指两条线程互相都在等待对方执行完毕,才能进入下一步操作。由于两条线程都不能执行下一步,所以造成死锁,卡住不动了。
      11.竞态条件:发生在多个线程试图访问共享资源时,这会导致意想不到的结果。通过使用同步,能够保护资源免受线程间共享的影响。
    
    二、线程安全问题
      当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。
      解决多线程安全问题的办法:
      1.方法一:互斥锁(同步锁)
      @synchronized(锁对象) {
          //需要锁定的代码
       }
      判断的时候锁对象要存在,如果代码中只有一个地方需要加锁,大多都使用self作为锁对象,这样可以避免单独再创建一个锁对象。
      加了互斥做的代码,当新线程访问时,如果发现其他线程正在执行锁定的代码,新线程就会进入休眠。
      2.方法二:自旋锁:
      加了自旋锁,当新线程访问代码时,如果发现现有其他线程正在锁定代码,新线程会用死循环的方式,一直等待锁定的代码执行完成。相当于不停的尝试执行代码,比较消耗性能。
      属性修饰atomic本身就有一把自旋锁。
      nonatomic 非原子属性,同一时间可以有很多线程读和写
      atomic 原子属性(线程安全),保证同一时间只有一个线程能够写入(但是同一个时间多个线程都可以取值),atomic 本身就有一把锁(自旋锁)
      atomic:线程安全,需要消耗大量的资源
      nonatomic:非线程安全,不过效率更高,一般使用nonatomic
    
    参考文章:
      http://www.cocoachina.com/ios/20170707/19769.html
      http://www.cocoachina.com/ios/20170623/19617.html
    

    相关文章

      网友评论

          本文标题:一、多线程的基本概念

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