- 🌟纤程(用户空间之内的线程)
- 比线程的粒度更小的一个概念
- 适合于计算密集型的任务,不经过内核空间的那些任务
- jdk暂时官方不支持纤程,但是有第三方纤程库
- 纤程轻、线程重
- 主要是在发生切换的角度上
- 纤程在用户空间,线程在内核空间
- 线程OS起不了多少,每个线程差不多1M内存,现有的OS起1w个线程就会很慢,大部分时间都放在线程的切换上了
- 纤程可以起几万个,比线程多得多
- 纤程的管理和执行在目前的hotspot上不成熟—->Quasar类库(一个网站的产品)
- 未到1.0,了解即可,不建议开发中使用
- golang、kotlin、python天然支持纤程
- python什么都支持,因为有好多人给python写库
- java中用maven引入
- 目前这个类库不是很成熟,并且使用这个类库的人真的不多
- 源码是用什么写的,底层到底是怎么执行的
- Quasar就是java写的
- 执行的时候需要设置VM options:-javaagent—->instrumetation,动态更改字节码,获取对象的大小(长度),其中字段的大小和长度!!!(对象布局)
- 代理
- JVM本身是不支持纤程的,不支持在用户空间中只要有一个纤程过来就给你分配一个栈,不可能支持
- 所以Quasar类库通过agent改动,会自动生成对应的纤程栈,一个Fiber对应地生成一个纤程栈,然后整个Quasar类库来管理栈之间(Fiber之间、纤程之间)的切换—->premain???❓❓❓
- 切换更轻松、更容易easy!!!