知识卡片
绿色线程用运行时自管理换取可扩展性但代价是脱离操作系统感知
内容
早期操作系统线程实现不适合支持单进程内几百个线程同时存在且锁操作代价高,一些虚拟机因此自己实现绿色线程:把很多语言层面线程压缩映射到少数真正操作系统线程上,完全由虚拟机自己调度,好处是能轻松扩展大量线程、灵活实现自己的锁语义。代价是操作系统完全不知道虚拟机内部在做什么,和不了解调度模型的本机代码交互时容易出现莫名性能异常。
参考来源
- 位置:《架构之美》第10章《元循环虚拟机的力量:Jikes RVM》10.5.6节《线程模式》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0228.xhtml)
- 结论依据:原文明确"典型的操作系统线程实现方式不适合支持单个进程中有好几百个线程,锁操作……的开销非常昂贵……一些JVM自己实现线程,利用一个名为绿色线程(green threading)的操作模式……主要缺点是操作系统不知道JVM正在做什么,这会导致许多性能反常"。
- 原始内容:典型的操作系统线程实现方式不适合支持单个进程中有好几百个线程,锁操作(实现Java的同步方法所必需的)的开销非常昂贵……绿色线程的主要优点在于……使它非常容易扩展。主要缺点是操作系统不知道JVM正在做什么。