进程:process 线程:thread 协程:coroutine/feber 引子 最近在重新梳理知识体系,在比较编程语言的时候,发现现在流行的lua go rust kotlin之类都有 协程的概念,而JAVA在这块是比较迟钝的,而像go这类语言内置了协程,可以很容易写出高性能的程序 。什么是”协程“ 众所众知,进程是OS用来分配资源的最小单位,线程是进行任务执行的最小单位,进程与线程都是OS级别的,两者的运行都依赖于cpu的调度与资源分配,进程与线程都属于内核态 。而协程是在种轻量级别的线程,CPU根本不知道有协程的使用调度,它运行在用户态,不需要与内核打交道,节省了OS级别的上下文切换 Java中的协程 其实java相比go rust等有点落后,没有内置的协程概念,目前只能使用线程池,事件驱动等形式来支持高性能的程序,java目前有一些协程的类库quasar,提供了纤程的使用,纤程其实就是协程 。下面用quasar写个例子来验证一下纤程有多厉害吧 。例子很简单,启动100万个线程或者纤程,每个线程或纤程处理2kw次运算 。
普通线程类 package com.fqh.review.base.fiber;
/**
- @author fqh
- @Description: java 线程例子
- @date 2020/7/28下午4:49 */ public class JavaThread {
- 100w个线程,每个线程处理2千万次运算
- @param argus
- @throws InterruptedException */ public static void main(String[] argus) throws InterruptedException { long begin = System.currentTimeMillis(); int threadLength=1000000;//100w Thread[] threads=new Thread[threadLength]; for (int i=0;i<threadLength;i++){ threads[i]=new Thread(()->{ calc(); }); }
for (int i=0;i<threadLength;i++){threads[i].start();}for (int i=0;i<threadLength;i++){threads[i].join();}System.out.println(System.currentTimeMillis()-begin);
}//2kw次计算 static void calc(){ int result=0; for(int i=0;i<10000;i++){ for(int j=0;j<200;j++){ result+=i; } } }
}
- 纤程测试类 引入quasarJar
package com.fqh.review.base.fiber;
import co.paralleluniverse.fibers.Fiber; import java.util.concurrent.ExecutionException;
/**
- @author fqh
- @Description: java 纤程测试用例
- @date 2020/7/28下午4:48
推荐阅读
- 恒星在主星序阶段是什么 太阳目前属于赫罗图中的主序星
- 市值|“万亿宁王”称号不保!宁德时代开盘暴跌 股东人均赔辆奔驰
- 电池|手机用4年电池依然保持健康!一加Ace要成“钉子户手机”
- 腾讯|“冒充老干妈员工诈骗腾讯”案二审宣判:维持原判 三人判刑退赔腾讯431万
- 祁门红茶怎么泡?
- 健康源自“淡生活”
- 标贝科技入选“2020人工智能语义识别创新排行”
- 灵异真实故事民间 灵异民间故事
- JAVA并发-ScheduledExecutorService
- Photoshop我要的光明“滤色”混合模式