基于Linux的问题,这是占用CPU直到2.6.38的有效方法。 JVM怎么样?假设我们已经实现了无锁算法,所有这些线程完全相互独立。更多的线程会帮助我们从系统中获得更多的CPU时间吗?
答案 0 :(得分:3)
简短的回答是肯定的。更多进程也会导致更多的CPU时间。
现代操作系统上典型调度程序的默认假设是,任何要求CPU时间的内容都打算使用CPU来实现有用的前进进度,并且通常更重要的是尽可能多地取得进展,而不是“公平”。如果您有一些对您的特定工作负载很重要的公平概念,您可以在大多数操作系统中对其进行专门配置。
答案 1 :(得分:0)
更多线程将使用更多的cpu时间。但是,您也会获得更多的开销,并且最终可能会完成较少的有用工作。对于您的线程可以独立工作的cpu绑定进程,最佳线程数可以是您拥有的cpu数,但很少。对于系统资源受限的进程,最佳数量可以是1。对于系统有限进程的外部,你实际上可以通过拥有比cpus更多的线程来获得,但是假设总是如此是错误的。
简而言之,你的目标是刻录cpu还是完成某件事。
答案 2 :(得分:0)
假设我们已经实现了无锁算法,所有这些线程完全相互独立。更多的线程会帮助我们从系统中获得更多的CPU时间吗?
不完全确定你在问什么。如果您的线程使用大量CPU,JVM当然可以超过100%并接管多个CPU。 IO绑定应用程序,无论线程数量多少,都可能超过100%,但永远不会持续。如果您正在等待Web连接或读取和写入磁盘,那么它们可能会最大化IO链并且不会运行很多并发处理。
当JVM分叉一个线程(取决于arch)时,它与OS一起分配OS线程。在linux中,这些被称为克隆,您可以在进程表中看到它们,并使用正确的args到ps。如果在JVM中分叉100个线程,则linux内核中有100个相应的克隆。如果所有这些都在旋转(即不等待某些系统资源),那么操作系统将根据优先级和与其他应用程序和系统进程的竞争为他们提供所有可用CPU片段。