V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
2225377fjs
V2EX  ›  问与答

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

  •  
  •   2225377fjs · 2016-08-01 11:51:49 +08:00 · 3835 次点击
    这是一个创建于 3037 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    1 条回复    2016-08-01 13:05:36 +08:00
    wevsty
        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 之间,这个也比较符合楼主实测的结果。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3582 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:56 · PVG 08:56 · LAX 16:56 · JFK 19:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.