既然使用多线程计算可以提高计算效率,那么是不是线程越多越好呢?我们可以来实验一下:
|
A |
B |
1 |
=file("PersonnelInfo.txt") |
|
2 |
=now() |
|
3 |
fork to(4) |
=A1.import@t(;A3:4) |
4 |
|
return B3.select(City=="San Diego") |
5 |
=A3.conj() |
=interval@ms(A2,now()) |
6 |
|
|
7 |
=now() |
|
8 |
fork to(400) |
=A1.import@t(;A8:400) |
9 |
|
return B8.select(City=="San Diego") |
10 |
=A8.conj() |
=interval@ms(A7,now()) |
在这里,2~5行使用多线程计算,分4个线程完成计算。7~10行同样使用多线程计算,不过使用了400个线程完成计算。在A5和A10中获得的结果,和上一节中的情况结果都是相同的。
现在来查看B5和B10中估算的计算耗时:
可以发现,虽然在A8中的多线程计算使用了非常多的线程,但是计算效率不但没有明显的提升,耗时还变多了。这是由于,系统空闲的CPU是有限的,过多的线程仍然需要等待顺次计算,往往不但无法提升效率,反而由于线程本身需要占用一定的资源,而造成速度变慢。在实际使用中,线程数略小于系统的CPU核数就可以获得比较好的性能了。