iOS多线程

一 .1.多线程的四种解决方案:pthread、NSThread, GCD,NSOperation

2.进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,主要管理资源。

3.线程:是进程的基本执行单元,一个进程对应多个线程。

4.主线程:处理UI,所有更新UI的操作都必须在主线程上执行。不要把耗时操作放在主线程,会卡页面。

5.多线程:在同一时刻,一个CPU只能处理一条线程,但CPU可以在多条线程之间快速的切换,只要切换的足够快,就造成了多线程一同执行的假象。

6.线程就像火车的一节车厢,进程则是火车。车厢(线程)离开火车(进程)是无法跑动的,而火车(进程)至少有一节车厢(主线程)。多线程可以看做多个车厢,它的出现是为了提高效率。

7.多线程是通过提高资源使用率来提高系统总体的效率。

8.我们运用多线程的目的是:将耗时的操作放在后台执行!

二.线程的状态与生命周期

下图是线程状态的示意图,从图中可以看出线程的生命周期是:新建-就绪-运行-阻塞-死亡

线程状态示意图

下面分别阐述线程生命周期中的每一步

1.新建:实例化线程对象

2.就绪:向线程对象发送start消息,线程对象被加入可调度线程池等待CPU调度。

3.运行:CPU负责调度可调度线程池中线程的执行。线程执行完成之前,状态可能会在就绪和运行之间来回切换。就绪和运行之间的状态变化由CPU负责,程序员不能干预。

4.阻塞:当满足某个预定条件时,可以使用休眠或锁,阻塞线程执行。sleepForTimeInterval(休眠指定时长),sleepUntilDate(休眠到指定日期),@synchronized(self):(互斥锁)。

5.死亡:正常死亡,线程执行完毕。非正常死亡,当满足某个条件后,在线程内部中止执行/在主线程中止线程对象

6.还有线程的exit和cancel

7.[NSThread exit]:一旦强行终止线程,后续的所有代码都不会被执行。

8. [thread cancel] 取消:并不会直接取消线程,只是给线程对象添加isCancelled标记。

三.多线程的四种解决方案

多线程的四种解决方案分别是:pthread、NSThread、GCD、NSOperation。

下图是对这四种方案进行了解读和对比。

四.线程安全问题

当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。就好比几个人在同一时修改同一个表格,造成数据的错乱。

解决多线程安全问题的方法

方法一:互斥锁(同步锁)

判断的时候锁对象要存在,如果代码中只有一个地方需要加锁,大多数使用self作为锁对象,这样可以避免单独再创建一个锁对象。

加了互斥做的代码,当新线程访问时,如果发现有其他线程正在锁定代码,新线程会用死循环的方式,一直等待锁定的代码执行完成。xiang

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,341评论 0 23
  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 6,380评论 1 14
  • 多线程的四种解决方案:pthread,NSThread,GCD,NSOperation 一、多线程的基本概念进程:...
    阳明AI阅读 575评论 0 3
  • 听着办公室一起的同学工作签好了 心里挺慌的
    小丁老师_6d2f阅读 140评论 0 0
  • Loss n. 一、释义 1)An undesirable outcome of a risk; the disa...
    修仙小汤圆阅读 1,725评论 0 2

友情链接更多精彩内容