Java过去有绿线,即在VM中实现。
Python事件的描述说:"Eventlet是围绕绿色线程的概念构建的(即协同线.).绿色线程相互协作“
但据我所知,Java绿色线程并不使用协作多任务处理,而是具有与本机线程完全相同的执行模型。
这里有矛盾吗?绿色线程的正确定义是什么?
发布于 2022-04-03 08:52:18
“绿色线程”的定义特性是线程在用户空间中管理,而不是由内核管理。绿色线程通常是协同管理的,但在某种程度上也可以在用户空间中抢先调度绿色线程。
在实践中,现代的“绿色线程”实现倾向于在本机线程池的基础上使用协作调度,这些线程由操作系统先发制人地调度。特别是,现在程序员在具有异步/等待关键字的程序中描述可能的暂停点是很常见的。
但是协作调度并不要求程序员显式地让步,因为这样的暂停点也可以由编译器或运行时定期插入(这给程序员留下了类似线程的语义,因为执行几乎可以在任何点被挂起)。特别是,JVM运行时在正常代码执行的基础上进行大量簿记。除了为了调度目的暂停执行主程序之外,还需要这样的挂起功能来优化当前运行的函数和停止世界垃圾收集器。CPython运行时可以说是伪协作调度本机线程的一个例子:虽然可以启动多个本机线程,但在内部运行代码会获得全局解释器锁,因此一次只会有一个线程取得进展。这意味着某些函数可以像合作计划的方法那样以原子方式完成。
https://softwareengineering.stackexchange.com/questions/437790
复制相似问题