在 Java 中运行 100 万个线程

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022和2023Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022和2023Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022和2023Goland激活码,Goland稳定专属激活码(持续更新)

在我们深入研究创建一百万个线程之前,让我们先看看 Java 线程的历史。

Java 线程从 Java 1.0 开始就存在,用于在 Java 应用程序中提供并发性。最初它们被称为“绿色线程”,主要是完全由 JVM 管理的线程。这是因为在 Java 1.0 发布时,CPU 大多是单核的,而且当时的操作系统不支持内核/平台线程(稍后会详细介绍)。这是一个一对多的 实现,其中一个实际线程可以满足多个 Java 线程的需求。这些 Java 线程有自己的调用堆栈,并且使用了大量内存。

但是随着 CPU 和操作系统变得越来越先进并支持内核/平台级线程,线程的 Java 实现也发生了变化。Java 后来采用了一对一的实现,其中 Java 线程实际上是内核/平台线程上的薄包装器。内核/平台线程由操作系统创建和管理,除了堆存储之外,包裹在内核/平台线程上的每个 Java 线程可能会消耗超过 1 兆字节的内存,并且创建起来非常昂贵。为了消除这种情况,使用线程池来重用 Java 线程。

这对 Java 应用程序可以支持并发的线程数有一个上限。引入了以下公式来计算理想的线程池大小。

线程池大小 = CPU 核心数 + 1

这一直是 Java 中的一个限制,因为其他更新的编程语言,如 Go(goroutines)、Akka(actors)和 Erlang(processes)有不同的并发编程模型。

为了解决这个限制,Loom 项目诞生了,以支持 Java 中的“虚拟线程”,它比现有的内核/平台包装线程更轻量级。现在,这些虚拟线程将再次由 JVM 管理,而不是由类似于 Java 1.0 的绿色线程的底层操作系统管理。Green threads 和 Virtual threads 之间的显着区别是 Virtual threads 可以有一个可以增长和收缩的动态调用堆栈,而 Green threads 有固定的调用堆栈,它会消耗内存。

为了实现虚拟线程,Loom 项目在 JVM 中引入了 3 个新概念。

  1. Scheduler——这是一个 ForkJoin 池,其大小通常等于 CPU 中的核心数。
  2. 载体线程——载体线程是一个内核/平台线程,将用于执行虚拟线程的任务。Scheduler 将有一个 Carrier Threads 池。虚拟线程的调用堆栈将在其运行时挂载和卸载到 Carrier 线程的堆栈。
  3. Continuation——这类似于 run,yield 调用,其中虚拟线程可以根据 JVM 完成的操作在运行和空闲之间切换。
    例如:- 当虚拟线程进行数据库查询或 HTTP 请求等阻塞调用时,它可能会屈服,直到获得响应,以便其他虚拟线程可以执行。

因此,让我们看看实际的虚拟线程并将其与平台/内核线程进行比较。Java 19 发布了 Project Loom 的预览版,这是我用来执行此演示的项目。最初我运行了一个试图创建 100 万个平台/内核线程的应用程序。

发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5340.html

(0)
上一篇 2023年3月6日 上午8:25
下一篇 2023年3月8日 上午9:05

相关推荐

  • 为什么 Python 在金融领域如此火爆?

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2022年12月30日
    00
  • 我是如何通过准备 Java 技术面试来深入学习 Java 的

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年5月31日
    00
  • 你能同时学习两种语言吗?

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年1月13日
    00
  • Spring Boot 2.0 — 项目结构和最佳实践(第 1 部分)

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年4月3日
    00
  • 从前端到后端编码的过渡

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022Webstorm激活码,Webstorm稳定专属激活码(持续更新) 2022Phpst…

    2022年10月23日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注