我在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是不是?
由于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上运行.