Thread.sleep我在试验或演示 Java 代码的并发性时使用。通过睡觉,我假装正在进行一些需要一些时间的处理工作。
我想知道在Project Loom下做这件事。
Thread.sleep以同样的方式使用吗?为了自我教育,我观看了一些 2020 年末 Oracle 的 Ron Pressler 介绍 Project Loom 技术的视频(此处,此处)。虽然很有启发性,但我不记得他提到过休眠线程的问题。
当虚拟线程由于同步调用而被阻塞时,它正在让步,因此调度程序会将其从相关的 Carrier 线程中卸载。
我想知道,虚拟线程如何知道它当前处于等待状态并且是时候让出了?
我是一名爱好者,对虚拟线程感到好奇。在文档中,它说固定线程的条件之一是在同步块中,并且在这些情况下使用信号量。以下是 JEP 的文档https://openjdk.org/jeps/444
在两种情况下,虚拟线程在阻塞操作期间无法卸载,因为它被固定到其载体:当它执行同步块或方法内的代码时,或者当它执行本机方法或外部函数时。
这是因为同步块的实现是自旋锁并且线程不会停止执行指令,而信号量会在几次尝试后屈服?
我是一名 Java Spring boot 开发人员,我开发 3 层 CRUD 应用程序。我和一个似乎对这个主题很了解的人交谈过,但我没有得到他的联系方式。他提倡使用 Python 的 FastApi,因为它的水平扩展性比 Spring boot 更好。他提到的原因之一是FastApi是单线程的。当线程遇到数据库查找(或其他可以异步完成的工作)时,它会选择其他工作,以便稍后在数据库结果传入时返回到当前工作。在 Java 中,当有许多请求待处理时,线程池可能会耗尽。
我不能百分百理解这个推理。让我扮演魔鬼代言人。当Python程序遇到异步调用时,它必须以某种方式将程序指针存储在某个地方,以记住稍后需要在哪里继续。我知道存储程序指针的地方根本不是线程,但我必须给它起个名字,所以我们称它为“逻辑线程”。在 Python 中,您可以有许多正在等待的逻辑线程。在 Java 中,您可以拥有一个线程池,其中有许多正在等待的实际线程。对我来说,唯一的区别似乎是 Java 的线程是在操作系统级别管理的,而 Python 的“逻辑线程”是由 Python 或 FastApi 管理的。为什么在线程池中等待的实际线程比等待的逻辑线程要昂贵得多?如果我的大多数线程都在等待,为什么我不能增加线程池大小以避免耗尽?
我正在尝试用 Java 测试虚拟线程参考 loom 项目,并且使用以下 JDK 19-loom 版本:
package com;
import java.util.concurrent.ThreadFactory;
public class a {
public static void main (String [] args) throws Exception{
Runnable printThread = () -> System.out.println(Thread.currentThread());
ThreadFactory virtualThreadFactory = Thread.builder().virtual().factory();
ThreadFactory kernelThreadFactory = Thread.builder().factory();
Thread virtualThread = virtualThreadFactory.newThread(printThread);
Thread kernelThread = kernelThreadFactory.newThread(printThread);
virtualThread.start();
kernelThread.start();
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下 IntelliJ 配置:
但我有以下错误:
而且线程的构建者似乎没有被识别
我想知道我还需要什么?
有没有办法知道哪个平台线程正在承载当前虚拟线程或将虚拟线程固定到平台线程并在JDK19中获取其线程本地?我想在虚拟线程中重用一些对象,比如Golang中的sync.Pool。
在早期的 Java 版本中,JVM 线程与本机操作系统线程复用。此类线程被称为“绿色线程”。这在 Java 的早期版本中已被弃用,每个 Java 线程都对应一个操作系统线程。
然而,在 Project Loom 中,执行上下文不再是线程,而是可以执行代码的“某个”对象。但它仍然必须多路复用到本机线程才能执行,不是吗?如果是这样的话,对我来说,这看起来像是回到了绿色线程。
我很确定我错过了一些我想知道它是什么的东西。我可以得到一些帮助吗?
project-loom ×7
java ×5
concurrency ×1
fastapi ×1
fibers ×1
java-19 ×1
java-threads ×1
performance ×1
process ×1
python ×1
thread-sleep ×1