JEP 462 结构化并发是一个很愚蠢的提案
Motivation
Developers manage complexity by breaking tasks down into multiple subtasks. In ordinary single-threaded code, the subtasks execute sequentially. However, if the subtasks are sufficiently independent of each other, and if there are sufficient hardware resources, then the overall task can be made to run faster (i.e., with lower latency) by executing the subtasks concurrently. For example, a task that composes the results of multiple I/O operations will run faster if each I/O operation executes concurrently in its own thread. Virtual threads (JEP 444) make it cost-effective to dedicate a thread to every such I/O operation, but managing the huge number of threads that can result remains a challenge.
开发人员通过将任务分解为多个子任务来管理复杂性。在普通的单线程代码中,子任务顺序执行。然而,如果子任务彼此充分独立,并且如果有足够的硬件资源,则可以通过同时执行子任务来使整体任务运行得更快(即,具有更低的延迟)。例如,如果每个 I/O 操作在自己的线程中并发执行,则由多个 I/O 操作组成的任务将运行得更快。虚拟线程 ( JEP 444 ) 使为每个此类 I/O 操作专用一个线程变得经济高效,但管理可能产生的大量线程仍然是一个挑战。
该提案还号称参考了 Erlang
Structured concurrency is an approach to concurrent programming that preserves the natural relationship between tasks and subtasks, which leads to more readable, maintainable, and reliable concurrent code. The term "structured concurrency" was coined by Martin Sústrik and popularized by Nathaniel J. Smith. Ideas from other languages, such as Erlang's hierarchical supervisors, inform the design of error handling in structured concurrency.
但是在 erlang 的视角, process 本身就是贯穿性的任务实体, 而 virtual thread 相当于 erlang 的 process, 按此推理, virtual thread 形成一个层次化的关系, 就可以表达任务及其子任务.
在 ExecutorService 时代, 线程很贵, Java 的 Runnable Callable 跨越了多个线程, 将任务分布于线程上, 是很高明的设计. 但 virtual thread 已经不需要这种巧妙的设计了————这不知道是进步还是退步————既然选择了 virtual thread 新的并发模型就应当以 virtual thread 出发. 遗憾的是, virtual thread 努力摆脱的 reactive 编程 在这个结构化并发的提案里又回来了.
virtual thread 再加一个 channel 就相当于 golang 了, 搞并发的不妨别管 JEP462.
JEP 462 结构化并发是一个很愚蠢的提案的更多相关文章
- 使用async进行结构化并发程序开发
异步风格的函数: 继续来学习async相关的东东,对于它其实可以用到函数上,也就是用它可以定义一个异步风格的函数,然后在该函数中再来调用普通的函数,下面来瞅一下: 其实“GlobalScope.asy ...
- 【Java并发.6】结构化并发应用程序
6.1 在线程中执行任务 应用程序提供商希望程序支持尽可能多的用户,从而降低每个用户的服务成本,而用户则希望获得尽可能快的响应.大多数服务器应用程序都提供了一种自然的任务边界选择方式:以独立的客户请求 ...
- JAVA并发编程学习笔记------结构化并发应用程序
1. Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程相当于消费者,如果要在程序中实现一个生产者-消费者的设计,最简单的方式通常就是使用Executor 2. Exe ...
- C#多线程(四)并行编程篇之结构化
前言 在前三章中我们的案例大量使用到了Thread这个类,通过其原始API,对其进行创建.启动.中断.中断.终止.取消以及异常处理,这样的写法不仅不够优雅(对接下来这篇,我称其为.NET现代化并行编程 ...
- Structured Streaming Programming Guide结构化流编程指南
目录 Overview Quick Example Programming Model Basic Concepts Handling Event-time and Late Data Fault T ...
- ElasticSearch 2 (13) - 深入搜索系列之结构化搜索
ElasticSearch 2 (13) - 深入搜索系列之结构化搜索 摘要 结构化查询指的是查询那些具有内在结构的数据,比如日期.时间.数字都是结构化的.它们都有精确的格式,我们可以对这些数据进行逻 ...
- NumPy之:结构化数组详解
目录 简介 结构化数组中的字段field 结构化数据类型 创建结构化数据类型 从元组创建 从逗号分割的dtype创建 从字典创建 操作结构化数据类型 Offsets 和Alignment Field ...
- HTML结构化
目的:为开发页面时有一套明确的页面结构化实施方案,提高开发效率: HTML结构化指的其实就是使用HTML语义化标签根据web标准书写具有明确结构逻辑的HTML代码的一种思路: 说白了重点就是:页面实际 ...
- Bigtable:一个分布式的结构化数据存储系统
Bigtable:一个分布式的结构化数据存储系统 摘要 Bigtable是一个管理结构化数据的分布式存储系统,它被设计用来处理海量数据:分布在数千台通用服务器上的PB级的数据.Google的很多项目将 ...
- 自己DIY出来一个JSON结构化展示器
说来也巧,这个玩意,一直都想亲手写一个,因为一直用着各种网上提供的工具,觉得这个还是有些用途,毕竟,后面的实现思路和原理不是太复杂,就是对json的遍历,然后给予不同节点类型以不同的展现风格. 我这次 ...
随机推荐
- nexus 部署与设置
安装nexus df -h 先查看目录磁盘空间,我安装的版本占用了四个G 空间,目录文件空间不够导致启动失败 上传 nexus 压缩包,并解压 查询 8081 端口号是否被占用 sudo netsta ...
- 全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码
全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码 摘要: 在 Python 中,字符串是文本的表示,默认使用 Unicode 编码,这允许你处理各种字符集,字符编 ...
- RTPS代理与转发服务
Proxy介绍 利用libevent实现网络连接和线程池.通过tcp连接的方式实现rtsp消息转发,再通过udp连接进行rtp与rtcp转发.报文解析使用到了Qt库.请尽量使用qmake进行编译.源码 ...
- 活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术
在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一.随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用.数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效.更智 ...
- 揭秘 FineVideo 数据集构建的背后的秘密
开放视频数据集稀缺,因此减缓了开源视频 AI 的发展.为此,我们构建了 FineVideo,这是一个包含 43,000 个视频的数据集,总时长为 3,400 小时,并带有丰富的描述.叙事细节.场景分割 ...
- Fluent Operator:云原生日志管理的一把瑞士军刀
作者:程德昊,Fluent Member,KubeSphere Member Fluent Operator 介绍 随着云原生技术的快速发展,技术的不断迭代,对于日志的采集.处理及转发提出了更高的要 ...
- Java消息队列入门详解
什么是消息队列? 消息队列的产生主要是为了解决系统间的异步解耦与确保最终一致性.在实际应用场景中,往往存在一些主流程操作和辅助流程操作,其中主流程需要快速响应用户请求,而辅助流程可能涉及复杂的处理逻辑 ...
- 可重入锁ReentrantLock
ReentrantLock 重入锁,是实现Lock 接口 的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁后再次获取不会被阻塞. 要想支持重入 ...
- 【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
咋想到这茬了 最近开始忙毕设的事儿了,想部署个伪分布式的Spark + Hadoop集群来进行测试.思来考去,最终咱把目光放在了Docker上. 盘了两天,发现这玩意意外的有趣,镜像构建好后开箱即用, ...
- MarkDown用法学习笔记
标题: 用 '#'标识,可以到从1到6级标题设置,有多少个'#'符号就对应多少级标题 粗体: 用''标识,如果两边只有一个''标识是斜体,如果两有2个这符号标题是加粗,如果有3个这符号标识是斜体和加粗 ...