从前程序员只对实现功能感兴趣,
多核平台推出之后,程序员又需要多长一根筋。要不写出来的程序效率差,
又要被使用多核机器的玩家骂了。谁愿意用多花钱买了多核机器,软件却是单线程,只用得到单核的性能。
“不就是多线程嘛,好办的不得了。我的程序里面本来存在几个线程。调用库的时候,
库里面就
implicit的开了几个线程。这样不就适合多核了吗。”
程序员们如是说。
殊不知少考虑了一个非常重要的问题。一个线程就相当于一个工人,
是不是工人越多,生产效率就越高。这是典型的是否人多力量大的命题。
答案自然是否定的。
线程是多了,
但是如果同一时间里面只有一个线程在干活,
线程多有什么用!!!
同一时间里面干活的线程数量被称为
concurrency level. 比如同一时间的干活线程数量是
4个,那么此时的
concurrency level 就是
4 (在有些分析软件里面是以
0为
concurrency level 计数起点,于是此时
concurrency level 是
3,
比如
cfinder 就是如此计
concurrency level 的)。
如果
4核机器上,
concurrency level为
4的时间维持得很久,
比如占整个运行时间的
80% ,
这样的多线程程序是真正对多核机器有效的。
如果
concurrency level 为
4的时间,
占整个运行时间的
1%,
90%的时间
concurrency level 为
1 ,
这样的多线程程序和单线程有区别吗!!!
这样的程序只能用到单核能力,
多核能力基本没有用到,是一定是需要性能调优的。
本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/131491,如需转载请自行联系原作者