gpt4 book ai didi

java - JVM线程的概念以及与OS线程的关系

转载 作者:行者123 更新时间:2023-12-02 12:26:13 24 4
gpt4 key购买 nike

这是我对 CPU 和线程的基本理解(天真!)。处理器每个核心可以运行一个线程。
我的笔记本电脑上的系统信息如下所示
处理器 Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz、2112 Mhz、4 核、8 个逻辑处理器**可以并行运行8个线程**
为了验证我的理解,我创建了一个 Spring Boot(嵌入式 tomcat)来处理每个请求

@GetMapping("/ping")
public String ping(@RequestParam String id) throws InterruptedException {
System.out.println(MessageFormat.format("The request id is {0}", id));
int i = Integer.parseInt(id);
long now = System.currentTimeMillis();
long period = 5000L;
long later = System.currentTimeMillis();
if (i % 2 == 1) {
while (later - now <= period) {
later = System.currentTimeMillis();
}
}
return PING_SUCCESSFUL;

}

我还将 tomcat 上的最大线程设置为以下

server.tomcat.max-threads=200

我现在使用 Apache JMeter 在 1 秒内触发 200 个请求

我的期望是我的系统仅限于运行 8 个线程,因此请求的总运行时间应至少为(200/8)*5 = 125 秒
然而,即使是 125 秒也是不现实的,因为我的系统上还运行着其他应用程序,如浏览器、JMeter、IntelliJ,它们本身应该考虑一些线程。

我观察到相反的行为 - 观察到的总运行时间是 5 秒系统如何可能运行超过限制的线程?(我发现对线程以及底层处理器如何并行化线程的理解有误)

最佳答案

确实,系统只能同时运行 8 个线程,但操作系统会安排在任何给定时间运行这 8 个线程中的哪一个,并且都可以 preempttime slice进程安排其他(等待)进程一段时间。 Java 线程与 native 线程同构,因此实际上是操作系统对它们进行调度(如果您的计算机按照您的想法工作,网络将在您的程序运行时停止工作)。

关于java - JVM线程的概念以及与OS线程的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60349849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com