相关疑难解决方法(0)

为什么没有"Thread.sleep"的"while(true)"在Linux上导致100%的CPU使用率而在Windows上却没有?

我在java中创建了一个简单的程序:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}
Run Code Online (Sandbox Code Playgroud)

如果我在Linux机器上运行它,它会显示100%的CPU使用率,但不会导致操作系统显得很慢.但是,如果我在Windows上运行完全相同的代码,它只显示大约20%的CPU使用率.

我在Windows上使用Oracle JRE,在Linux上使用OpenJDK 6.

我想知道Windows的调度程序是否随机抢占线程而Linux是不是?

java linux windows multithreading cpu-usage

158
推荐指数
1
解决办法
7286
查看次数

为什么单个python进程的cpu使用率可以超过100%?

由于GIL,我认为多线程python进程一次只能运行一个线程,因此cpu使用率不能超过100%.

但我发现下面的代码可以占用顶部950%的CPU使用率.

import threading
import time

def f():
    while 1:
        pass


for i in range(10):
    t = threading.Thread(target=f)
    t.setDaemon(True)
    t.start()

time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

这与Python解释器使用高达130%的CPU的问题不同.怎么可能?.在那个问题中,OP表示他正在进行I/O密集型负载测试,这可能会释放GIL.但在我的程序中,没有I/O操作.

测试在CPython 2.6.6上运行.

python multithreading cpython

7
推荐指数
1
解决办法
2023
查看次数

标签 统计

multithreading ×2

cpu-usage ×1

cpython ×1

java ×1

linux ×1

python ×1

windows ×1