码迷,mamicode.com
首页 > 编程语言 > 详细

多线程编程

时间:2015-06-12 09:45:32      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

 

这里所说的“1个CPU执行的CPU命令列为一条无分叉路径”即为“线程”。

 

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

 

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

 

基本上1个CPU核一次能够执行的CPU命令始终为1.那么怎么才能在多条路径中执行CPU命令行呢?

 

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

 

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

 

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

 

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

 

应用程序在启动时,通过最先执行的线程,即“主线程”来描绘用户界面,处理触摸屏幕的事件等。如果在该主线程中进行长时间的处理,如AR用画像的识别或数据

库的访问,就会妨碍主线程的执行(阻塞)。在OS X和iOS的应用程序中,会妨碍主线程中被称为RunLoop的主循环的执行,从而导致不能更新用户界面,应用程序的画面长时间停滞等问题。

 

多线程编程

标签:

原文地址:http://www.cnblogs.com/yang-guang-girl/p/4570798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!