iOS学习之多线程编程

原创 2016年05月31日 14:41:01

多线程编程简介

       一个CPU一次只能执行一个命令,不能执行某处分开的并列的两个命令,因此通过CPU执行的CPU命令行就好比一条无分叉的大道,其执行不会出现分歧。

       ”一个CPU执行的CPU命令列为一条无分叉路径“即为线程.

       现在一个物理的CPU芯片实际上有64个(64核)CPU,如果一个CPU核虚拟为两个CPU核工作,那么一台计算机上使用多个CPU核就是理所应当的事了。尽管如此”一个CPU执行的CPU命令列为一条无分叉路径”仍然不变。

       这种无分叉路径不只一条,存在有多条时即为”多线程”。在多线程中,1个CPU核执行多条不同路径上的不同命令。

       OS X和IOS的核心XNU内核在发生操作系统时间时(如每隔一定时间,唤起系统调用等情况)会切换执行路径。执行中路径的状态,例如CPU的寄存器等信息保存在各自路径专用的内存块中,从切换目标路径专用的内存块中,复原CPU寄存器等信息,继续执行切换路径的CPU命令列。这被称为”上下文切换”。

       由于使用多线程的程序可以在某个线程和其他线程之间反复多次进行上下文切换,因此看上去就好像1个CPU核能够并列地执行多个线程一样。而且在具有多个CPU核的情况下,就不是”看上去像”了,而是真的提供了多个CPU核并行执行多个线程的技术。

       这种利用多线程编程的技术就被称为”多线程编程”。

多线程编程存在问题

       但是,多线程编程实际上是一种易发生各种问题的编程技术。比如多个线程更新相同的资源会导致数据的不一致(数据竞争)、停止等待事件的线程会导致多个线程相互持续等待(死锁)、使用太多线程会消耗大量内存等。

       尽管极易发生各种问题,也应当使用多线程编程

这是为什么呢?

       因为使用多线程编程可保证应用程序的响应性能。

       应用程序在启动时,通过最新执行的线程,即”主线程”来描绘用户界面、处理触摸屏幕的事件等。如果在该主线程中进行长时间的处理,如AR用画像的识别或数据库访问,就会妨碍主线程的执行(阻塞)。在OS X和iOS的应用程序中,会妨碍主线程中被称为RunLoop的主循环的执行,从而导致不能更新用户界面、应用程序的画面长时间停滞等问题。这就是长时间的处理不在主线程中执行而在其他线程中执行的原因。

       使用多线程编程,在执行长时间的处理时仍可保证用户界面的响应性能。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Objective-C内存管理学习之__weak和__block

1、Blocks理解:Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock...
  • yxys01
  • yxys01
  • 2016年05月26日 09:58
  • 225

Objective-C学习之init

iOS中init一个对象时,会调用对象的init方法,进入init方法时会调用initWithNibName方法,可调试验证每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然...
  • yxys01
  • yxys01
  • 2016年05月24日 09:53
  • 158

iOS-多线程编程学习之NSOperation(四)

NSOperation是一个抽象类,可以用来封装一个任务的相关代码和数据。因为这是个抽象类,所以不能直接得到该类的实例化对象,而是需要继承该类实现其子类或者使用系统内置的两个子类(NSInvocati...

iOS学习之路05 - 多线程编程

基本概念 主线程 一个iOS程序运行以后,默认会开启一个线程,这个线程就被称为主线程或(UI线程)。主线程的主要作用是显示\刷新UI界面,处理UI事件(点击,滚动,拖拽等)。 iOS中的多线程 ...

iOS-多线程编程学习之GCD——串行队列和并发队列(五)

Grand Central Dispatch(GCD)有很多部分构成,例如有很好的语言特性,运行库,还提供了系统的、高效的方式来支持具有多核处理器的iOS和OS X设备进行并发事件处理。   BSD...

iOS-多线程编程学习之NSThread(三)

一个NSThread对象控制一个线程的执行。使用这个类你可以在线程中执行自定义的OC方法。当你需要执行长任务时使用线程是非常好的方式,它可以避免需要执行事件处理和UI更新的主线程被阻塞。此外,线程还可...

iOS-多线程编程学习之GCD——线程组、延时、计时器等(六)

上一篇文章我们介绍了GCD,以及其队列,同步异步等概念。这次我们将探讨更多GCD的功能,包括线程组(group),栅栏(barrier),单例(once),延时(after),并发迭代(apply)和...

iOS学习笔记10(8)—深入浅出 Cocoa 多线程编程之 block 与 dispatch quene

本来想总结一下block和dispatch queue的使用,发现下文实在详尽,所以转载过来。 本文转自: http://www.cppblog.com/kesalin/archive/2...
  • jjunjoe
  • jjunjoe
  • 2012年12月27日 15:26
  • 889

IOS学习笔记51--多线程编程之GCD

一、简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案。GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器。GCD...

iOS多线程编程

  • 2013年08月21日 11:04
  • 171KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS学习之多线程编程
举报原因:
原因补充:

(最多只允许输入30个字)