Windows多线程技术研究(二):多线程基本概念
“ Threads绝对可以缩短程序的执行时间吗? ”
“应该尽量多产生threads来帮助程序工作吗?”
“任何种类的程序都可以获得Multi-Thread的好处吗?”
似是而非的观念会将你的程序带往更坏的境界。
-----《Win32多线程程序设计》
在你想用线程时,你必须清楚地明白什么是现程,它能干什么,不能做什么。切记!!
每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程其实
是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它
的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序
运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程
是并发运行的。
多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务
的功能。有人会问:多进程技术不是也可以实现这一点吗?但是创建进程的高消耗(每
个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换
的时间太长,这些导致了多线程的提出。
对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想
实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个
线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是
同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要
将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价
就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。
但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需
要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程
序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。
上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程
技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映
射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。