导航

多线程

Posted on 2011-03-07 11:14  寒宵飞飞  阅读(434)  评论(0编辑  收藏  举报

多线程

 

一、多线程的解释     

       每个正在系统上运行的程序都是一个进程,每个进程包含一到多个线程。多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。(进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。)

     

二、多线程的特点

       对于单线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。而多线程编程具有以下特点:    

      1)多线程的使用可以增加程序的效率 (多线程主要是为了节约CPU时间,发挥利用。)

       对于单核CPU的电脑,在一个特定时刻只能进行一种运算,因此,当我们听着歌,看着网页时,windows系统利用CPU在依次快速进行着各个程序的运算,并且快速的进行切换。虽然CPU在同一时刻只能进行一种运算,但由于各个程序运算和切换速度够快,对我们观看网页,听歌曲没有什么影响。基本上CPU是按照这个流程进行运算的:

      网页刷新->歌曲播放->网页刷新->歌曲播放。。。

      当然当windows启动时,还有很多其他的系统进程一起运行,CPU运算过程跟上面差不多:

      系统进程A->系统进程B。。->网页刷新->歌曲播放-> 系统进程A->系统进程B。。->网页刷新->歌曲播放。。。

      当CPU利用率达到100%时,说明CPU在满负荷运行。例如大家在浏览网页,网页卡死,或者其他程序占用CPU过多的时候,CPU的利用率都达到100%,此时电脑播放歌曲也不是那么流畅了,因为CPU处理不过来,听起来音乐就是一卡一卡的。

      而电脑大部分时间CPU利用率都不到100%,这个说明CPU在程序运算(各个程序运算和切换)上还有余力。

      话题转回来,我们在编程时,电脑CPU给每个程序进程分配的计算基本是固定的。

      例如当前电脑CPU利用率为30%,还有70%可以使用,CPU给程序每个进程分配10%的处理速度,我们编写单线程程序A,程序A运行时只占用10%的CPU。当我们为程序A添加三个进程进行处理的话,程序A运行时占用30%的CPU,因此运算速度变为原来的3被,处理时间当然变为原来的1/3。

      (对于多核的CPU,电脑可以在一个时刻进行多个运算,使用多线程增加程序效率,原理和上面差不多,不同的是多核CPU多了并行处理,CPU功能更强而已)

      2)多线程可以简化用户界面

       多线程可以简化应用程序的用户界面,将一些操作由后台进行处理,把占据长时间的程序中的任务放到后台去处理。
      3)多线程可以使用户界面更加友善

      这样比如用户点击了一个按钮去触发某些事件的处理(主线程),此时可以利用一个线程,弹出一个进度条来显示处理的进度。

      4)多线程编程复杂性更高,容易产生错误

       多线程的创建复杂度比单线程程序高,并且容易产生各种线程之间的矛盾。例如程序A有两个线程,线程1和线程2,线程1打开txt文件进行编辑,当线程2也需要打开同一个txt文件进行编辑时,就会产生错误。一般来讲,当一个线程使用处理一个文件时,一般将这个文件进行锁定,其他线程就不会处理这个文件,避免了冲突。