代码之家  ›  专栏  ›  技术社区  ›  Guillaume Chevalier

为什么一个4线程程序在一个1核的虚拟机上比在一个4核的虚拟机上运行得更快?

  •  -1
  • Guillaume Chevalier  · 技术社区  · 7 年前
    • 程序是用gcc编译的,没有特殊的优化(默认编译设置)
    • 我循环了1000次程序。当虚拟机有4个内核时,需要花费2倍多的时间。为什么?

    注意:我运行的程序是一个C程序,产生了4个线程(pthread)并在经过一点计算后加入它们。它执行并行(而不是并发)。

    2 回复  |  直到 7 年前
        1
  •  0
  •   DrM    7 年前

    在I7中,所有内核共享L3缓存。如果额外的执行行在三级缓存上导致更多的缓存未命中,则可以通过添加核心来降低速度。

        2
  •  0
  •   mevets    7 年前

    有些问题令人尴尬地平行;有些问题“令人尴尬地连续”。您可能已经找到了后者,但如果不使用代码,我们只能猜测。

    BigLock解决方案,例如树,只能通过锁定整个结构来更新的列表,不能从多个cpu中受益。更糟糕的是,多个cpu可能会导致锁周围发生一系列的抖动,这将一无所获。

    推荐文章