准备总结一下多线程1

首先说到多线程脑海里浮现的是NSThread 和 GCD,然后呢NSThread虽然听说了很多,自己却没什么用过。那就先从这两个入手分析分析吧。

1, NSThread 周期
1)NSThread的创建 : NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadDemo) object:nil];
2)就绪, 将线程放进可调度线程池,等待被CPU调度:[thread start];
3)运行, CPU负责调度"可调度线程池"中的处于"就绪状态"的线程,结束之前状态有可能从就绪和运行两个状态自由切换,该过程又CPU决定
4)阻塞, 正在运行的线程,当满足某个条件时,可以用休眠或者锁来阻塞线程的执行:[NSThread sleepForTimeInterval:1.0];
5)死亡, 要不程序崩溃,要不自己写代码 [NSThread exit];

2,简单的说完了,现在说复杂的了。关于锁
当两个线程读取修改同一个资源的时候呢,可以用@synchronized这个互斥锁,表示我这个资源正在使用哦,等我运行完了你再用,这样就不会有脏数据的产生。可是这样也会运行慢一点,牺牲了性能保证了安全性。

3,nonatomic和atomic 其实一直都不理解为什么会有这两个东西,然后网上的解析永远都是atomic 是线程安全的,可是太慢,nonatomic 是线程不安全的,效率很高,一般都用这个,然后呢,然后就没然后。今天多看了一点atomic 的知识,让我感觉atomic 很像一个加了互斥锁的nonatomic一样,保证我这个属性在用的时候别人不能用,所以线程安全。然后网上说atomic是单写多读的,意思是写的话就互斥,读的时候就可以一起读。类似:A:我在写进去 B:哦,那我等你写完吧。A:我在读这个耶 B:来来来,那我们一起。就是这样的道理了嘛。

atomic 其实是自带自旋锁的,然后什么是自旋锁呢?那:
互斥锁和自旋锁对比
共同点:
都能够保证同一时间,只有一条线程执行锁定范围的代码
不同点:
互斥锁:如果发现有其他线程正在执行锁定的代码,线程会进入休眠状态,等待其他线程执行完毕,打开锁之后,线程会重新进入就绪状态.等待被CPU重新调度.
自旋锁:如果发现有其他线程正在执行锁定的代码,线程会以死循环的方式,一直等待锁定代码执行完成.

4,说了那么多乱七八糟的,居然还不说GCD,好吧,马上来说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、多线程基础 基本概念 进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且...
    AlanGe阅读 557评论 0 0
  • 多线程基本概念 单核CPU,同一时间cpu只能处理1个线程,只有1个线程在执行 。多线程同时执行:是CPU快速的在...
    WeiHing阅读 725评论 1 5
  • 一: 多线程的基本概念1.同步与异步的概念1.1 同步 必须等待当前语句执行完毕,才可以执行下一个语句。1.2...
    程序_猿阅读 3,534评论 1 16
  • 线程概述 有些程序是一条直线,起点到终点;有些程序是一个圆,不断循环,直到将它切断一个运行着的程序就是一个进程或者...
    褪而未变阅读 309评论 0 0
  • 1.用法一:常量 在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了...
    smallnumber阅读 307评论 0 1