|
1
14
实际上,某些优先级可以映射到相同的“本机”优先级。以下是列表(基于OpenJDK 6中的热点代码): Solaris
Linux
值得注意的是,在Linux上,Java中不同的线程优先级在本机级别映射到不同的优先级值。 窗户
|
|
|
2
1
您的理解是正确的-Java线程优先级没有清晰地映射到OS线程优先级。 因此,如果您的算法以任何方式依赖于线程优先级映射的细节,那么它就被破坏了,因为它会根据这么多变量而变化。例如,升级你的JRE或在你的操作系统上应用补丁/服务包可能会破坏它——当然,仅仅在不同的操作系统上运行也会产生后果。 除了非常不寻常的情况外,只使用两个优先级就足够了——正常优先级和低优先级。大多数工作将在正常线程中完成。低优先级应该保留给那些不允许耗尽正常优先级的线程的线程,而只允许它们狼吞虎咽地消耗掉处理器的能量。 如果您愿意,您可以获得比这更细粒度的信息,但您需要注意,任何更详细的信息都可能在目标平台上丢失。 |
|
3
1
我不太确定Linux上的Sun JVM。编写了一个快速Java程序,以生成10个具有每个优先级的线程,并使用大小数计算pi(4*atan(1)方法),每次500000次,在每个线程上加入,并报告run方法的运行时间。是的,可能不是最好的例子,但要保持基本。
看起来并不像人们期望的那样有多大的偏差!那是在一个小型的虚拟Linux机器上。让我们在真实的楼板上尝试一下,以防万一,此框也相当活跃,平均荷载很少低于7,让我们看看在这样的环境中如何安排:
嗯,这里没有太多变化,不知道1.4是否映射了线程。让我们试试windows的盒子。我知道Windows有一个相当积极的线程优先级模式。以上任何内容 典型的 奇闻轶事消耗更多。因此,让我们在每个线程中增加多达900000次迭代:
|
|
|
4
-1
因为我们讨论的是线程,我认为这永远不会直接到达操作系统。优先级可能是向JRE提示如何安排每个线程的CPU时间。为了处理您的示例,需要某种“打破僵局”算法。
|
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 2 年前 |
|
|
András Takács · Python多线程错误 2 年前 |