Windows多线程技术研究(二):多线程基本概念

来源:互联网 发布:dis mac-add 编辑:程序博客网 时间:2024/05/01 08:15

Windows多线程技术研究(二):多线程基本概念

 “ Threads绝对可以缩短程序的执行时间吗? ”

“应该尽量多产生threads来帮助程序工作吗?”

“任何种类的程序都可以获得Multi-Thread的好处吗?”

 似是而非的观念会将你的程序带往更坏的境界。

                     -----《Win32多线程程序设计》

 

在你想用线程时,你必须清楚地明白什么是现程,它能干什么,不能做什么。切记!!

 

 每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程其实

是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它

的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序

运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程

是并发运行的。

         多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务

的功能。有人会问:多进程技术不是也可以实现这一点吗?但是创建进程的高消耗(每

个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换

的时间太长,这些导致了多线程的提出。

        对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想

实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个

线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是

同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要

将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价

就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。

       但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需

要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程

序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。

       上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程

技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映

射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。

 

原创粉丝点击