绿色线程
来源:互联网 发布:北京java招聘 编辑:程序博客网 时间:2024/06/10 17:35
1.什么是绿色线程?
绿色线程(Green Thread)是一个相对于操作系统线程(Native Thread)的概念。
操作系统线程(Native Thread)的意思就是,程序里面的线程会真正映射到操作系统的线程,线程的运行和调度都是由操作系统控制的
绿色线程(Green Thread)的意思是,程序里面的线程不会真正映射到操作系统的线程,而是由语言运行平台自身来调度。
当前版本的Python语言的线程就可以映射到操作系统线程。当前版本的Ruby语言的线程就属于绿色线程,无法映射到操作系统的线程,因此Ruby语言的线程的运行速度比较慢。
难道说,绿色线程要比操作系统线程要慢吗?当然不是这样。事实上,情况可能正好相反。Ruby是一个特殊的例子。线程调度器并不是很成熟。
目前,线程的流行实现模型就是绿色线程。比如,stackless Python,就引入了更加轻量的绿色线程概念。在线程并发编程方面,无论是运行速度还是并发负载上,都优于Python。
另一个更著名的例子就是ErLang(爱立信公司开发的一种开源语言)。
ErLang的绿色线程概念非常彻底。ErLang的线程不叫Thread,而是叫做Process。这很容易和进程混淆起来。这里要注意区分一下。
ErLang Process之间根本就不需要同步。因为ErLang语言的所有变量都是final的,不允许变量的值发生任何变化。因此根本就不需要同步。
final变量的另一个好处就是,对象之间不可能出现交叉引用,不可能构成一种环状的关联,对象之间的关联都是单向的,树状的。因此,内存垃圾回收的算法效率也非常高。这就让ErLang能够达到Soft Real Time(软实时)的效果。这对于一门支持内存垃圾回收的语言来说,可不是一件容易的事情
2.Java世界中的绿色线程
所谓绿色线程更多的是一个逻辑层面的概念,依赖于虚拟机来实现。操作系统对于虚拟机内部如何进行线程的切换并不清楚,从虚拟机外部来看,或者说站在操作系统的角度看,这些都是不可见的。可以把虚拟机看作一个应用程序,程序的代码本身来建立和维护针对不同线程的堆栈,指令计数器和统计信息等等。这个时候的线程仅仅存在于用户级别的应用程序中,不需要进行系统级的调用,也不依赖于操作系统为线程提供的具体功能。绿色线程主要是为了移植方便,但是会增加虚拟机的复杂度。总的来说,它把线程的实现对操作系统屏蔽,处在用户级别的实现这个层次上。绿色线程模型的一个特点就是多CPU也只能在某一时刻仅有一个线程运行。
本机线程简单地说就是和操作系统的线程对应,操作系统完全了解虚拟机内部的线程。对于windows操作系统,一个java虚拟机的线程对应一个本地线程,java线程调度依赖于操作系统线程。对于solaris,复杂一些,因为后者本身提供了用户级和系统级两个层次的线程库。依赖于操作系统增加了对于平台的依赖性,但是虚拟机实现相对简单些,而且可以充分利用多CPU实现多线程同时处理。
- 绿色线程
- 绿色线程
- 绿色线程
- 绿色线程
- 绿色和本地线程简单介绍
- 绿色
- TCPView V3.0 绿色汉化版_查看端口和线程
- 脚印 绿色
- 金山毒霸 绿色
- 甲虎通 绿色
- 极速游龙 绿色
- 计算器 绿色
- 快刀斩乱麻 绿色
- 小康之家 绿色
- 小树 绿色
- 信缘进销存 绿色
- 绿色欧洲杯
- 绿色设计
- linux下提示一些基本的命令找不到
- 局域网PC架设代理
- [leetcode-123]Best Time to Buy and Sell Stock III(c++)
- listView item进行更新
- This Activity already has an action bar supplied by the window decor
- 绿色线程
- HDU 3371 Connect the Cities (克鲁斯卡尔)
- category & extension
- HDU 5374 Tetris
- 获取相册文件uri 转换成 path ,设置到ImageView
- HDOJ 5379 Mahjong tree 树形DP
- C# 中的委托和事件
- BLE蓝牙4.0串口调试助手
- elasticsearch查询内容精确匹配