非CS人员需要了解线程如何与多核处理器相关联

时间:2014-01-11 20:10:57

标签: java c++ multithreading computer-science

我没有计算机科学背景。我一直在学习java编程,并写了一些有用的毛病和坏程序。 : - /我是小公司中为数不多的开发人员之一,我需要改进和编写更好的程序。 我偶然发现了进入多线程的领域。在工作中,我听到人们谈论他们的计算机处理器如何有4核或8核等等。这是什么意思?在我理解多线程程序如何在不同的硬件规格上表现时,有一个黑盒子。因此,如果我运行一个在4核计算机上触发10个线程的java程序,它是如何工作的?如果我在8核处理器上运行相同的程序,我需要谨慎的一些事情是什么。还是2核处理器?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

很难准确回答。如果要优化,您应该进行基准测试。一些经验法则(有例外):

  • 不要创造大量的线程。超过数百个线程几乎总是一个错误(在当前桌面或普通服务器上)。只有几十个。
  • 对您的申请进行基准测试
  • 也许,以某种方式配置线程数(使用thread pool
  • 相关时,处理器中的核心数比线程多一些,尤其是对于受I / O限制的应用程序。

multi-core processor有几个(并行)CPUs或核心。每个核心都执行自己的线程(或进程或任务)。因此,几个线程真正并行(同时)执行。有些处理器是hyper-threaded(即两个寄存器组 - 共享...... - 共享相同的物理"核心"给出两个"虚拟"核心的错觉。

如果你运行一个10线程的Java程序(还有另外6个非线程系统" runnable"进程),那么操作系统内核(例如你的linux kernel)必须{{3这些10 + 6 = 16个任务(任务是多线程进程中的线程或单线程进程)。内核的调度程序将为每个任务提供核心上的运行时间量。在那段时间(例如几毫秒)之后,重新安排了一个新的可运行任务(在schedule操作系统上)

preemptive multi-tasking以及关于tutorialoperating systemprocessestasks ...

上阅读好linux