求教一个问题,超线程技术对服务器吞吐量的影响。。?

2016-08-01 11:51:49 +08:00
 2225377fjs

现在大多数 CPU 都支持超线程技术,但是具体这部分技术内容很少能查到资料。。现在能够肯定的是对于多线程并行的程序,超线程技术肯定是能够提高整体性能的(例如 Java )。。。

疑问就来了。。对于 Python 这种,并不能线程并行,更多的时候是采用多进程的方式来开发服务器端的应用。。那么这个时候超线程技术还有用么。。?

一些我已经试验过的结论: 在公司生产环境机器上, 16 核 32 线程的服务器,做同等的运算量(序列化之类的运算), 16 个进程所需要消耗的时间是大于开 25 个进程所消耗的时间的。。。但是如果开 32 个进程的话,所消耗的时间反而会大于 16 个进程消耗的时间。。 那么得出的结果是: 25 进程 > 16 进程 > 32 进程 (比较整体吞吐量)

貌似现在是可以直接关闭 Intel CPU 的超线程,这样再测试一下 16 个进程的吞吐量,但是这个操作起来比较麻烦,需要改 BIOS ,而我自己的笔记本貌似 BIOS 并没有提供这种功能。。。不不知道论坛里面有没有同志愿意来做一下类似的测试。。。。

其实问这个问题主要是想知道,在同等硬件环境下,对于 Python 服务端程序,应该启多少个进程是最优的。。。

3859 次点击
所在节点    问与答
1 条回复
wevsty
2016-08-01 13:05:36 +08:00
吞吐量的大小得看你程序是怎么实现的,没有绝对的数据。
举个例子,假设程序有机器算上超线程有 8 个逻辑核心,而程序执行的是高负载无间断的运算任务,那么 8 线程(进程)并行就足够吃满 100%CPU 了,开辟更多的线程会降低运算速度,因为系统会花费一些资源调度线程从而使得计算任务的时间片减少。相反如果程序执行大量的 IO 操作,或者需要等待的任务,那么开辟超过 8 个以上的线程将会获得更大的优势。
对 Intel 的超线程技术来说,除非很极端的情况,超线程技术应该是不会降低运行速率的。
可以参考一下网上媒体的数据
http://cpu.zol.com.cn/403/4039036_all.html

如果是大型计算任务,我个人建议是进程或者线程数量物理核心数量*1.2 到 1.5 之间,这个也比较符合楼主实测的结果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX