从理论上讲,如果当前存在n个线程,那么每个线程使用的cpu时间片为1/n,如果又开了一个线程,那么每个线程使用的cpu时间片为1/(n+1),当前进程所能使用的cpu时间片为2/(n+1)>1/n。
乍一看去,还真能提高速度,但别忘了,这仅仅是理论而已,实际情况要复杂的多。windows把cpu时间片分给每个线程后,这段时间内,cpu完全归这个线程和windows占有,线程就可以在这段时间内进行一些计算。如果计算完毕,还剩有一些时间,而线程又没有结束,那么windows将会一直等待下去,直到把下一个时间片分给另一个线程。
一般来说,分给每个线程的时间片大约是0.1秒,而很多时候,线程根本要不到这么多时间,于是大量的时间被浪费了,有时候甚至比线程用来进行计算的时间还多,这就出现了多线程反而更慢甚至把系统拖垮的情况。而在多处理器系统中,由于windows可以将任务分给不同的cpu同时计算,浪费量就相对少了,我们感觉上程序运行速度就更快了 |