首页 > 代码库 > 多线程

多线程

什么是多线程 

多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。在系 统级别内,程序并排执行,系统分配到每个程序的执行时间是基于该程序的所需时间 和其他程序的所需时间来决定的。然而在每个应程序的内部,存在一个或多个执行线 程,它同时或在一个几乎同时发生的方式里执行不同的任务。系统本身管理这些执行 的线程,调度它们在可用的内核上运行,并在需要让其他线程执行的时候抢先打断它 们。 

从技术角度来看,一个线程就是一个需要管理执行代码的内核级和应用级数据结 构组合。内核级结构协助调度线程事件,并抢占式调度一个线程到可用的内核之上。 应用级结构包括用于存储函数调用的调用堆栈和应用程序需要管理和操作线程属性 和状态的结构。

在非并发的应用程序,只有一个执行线程。该线程开始和结束于你应用程序的main 循环,一个个方法和函数的分支构成了你整个应用程序的所有行为。与此相反, 支持并发的应用程序开始可以在需要额外的执行路径时候创建一个或多个线程。每个 新的执行路径有它自己独立于应用程序 main 循环的定制开始循环。在应用程序中存 在多个线程提供了两个非常重要的的潜在优势:

多个线程可以提高应用程序的感知响应。
多个线程可以提高应用程序在多核系统上的实时性能。 如果你的应用程序只有单独的线程,那么该独立程序需要完成所有的事情。它必

须对事件作出响应,更新您的应用程序的窗口,并执行所有实现你应用程序行为需要 的计算。拥有单独线程的主要问题是在同一时间里面它只能执行一个任务。那么当你 的应用程序需要很长时间才能完成的时候会发生什么呢?当你的代码忙于计算你所

2011-11-28 | 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [2]

Threading Programming Guide

需要的值的时候,你的程序就会停止响应用户事件和更新它的窗口。如果这样的情况 持续足够长的时间,用户就会误认为你的程序被挂起了,并试图强制退出。如果你把 你的计算任务转移到一个独立的线程里面,那么你的应用程序主线程就可以自由并及 时响应用户的交互。

当然多线程并不是解决程序性能问题的灵丹妙药。多线程带来好处同时也伴随着 潜在问题。应用程序内拥有多个可执行路径,会给你的代码增加更多的复杂性。每个 线程需要和其他线程协调其行为,以防止它破坏应用程序的状态信息。因为应用程序 内的多个线程共享内存空间,它们访问相同的数据结构。如果两个线程试图同时处理 相同的数据结构,一个线程有可能覆盖另外线程的改动导致破坏该数据结构。即使有 适当的保护,你仍然要注意由于编译器的优化导致给你代码产生很微妙的(和不那么 微妙)的 Bug。 


多线程