浅谈Java13纤程

浅谈java13 增加了纤程和一些语法,

1.switch表达式语法,整个switch语句可以作为一个值来对待

int i=0;

String s = switch(i){

case 1 ->"i为1时返回的值"

case 2 ->"i为2时返回的值"

default ->"默认返回的值"

}

这个其实在Java12中已经有但属于尝鲜版本

2.字符串语法

之前Java中字符串拼接是非常麻烦的一个东西,比如:

String a = "第一个字符串"+

                "第二个字符串"+

                "第三个字符串";

Java13中  String a = """

                                    第一个字符串

                                    第二个字符串

                                    第三个字符串

                                """;

三个双引号  这是一个文本框的概念

纤程:在其他语言中早就有了纤程,比如go语言,python。    Java语言也慢慢开始有

什么是纤程

程序--》进程--》线程--》纤程


线程的效率要比纤程低

CPU一个内核态 一个用户态

先要了解CPU 是有执行级别的 CPU --》CPL--》0123 举个4个级别的CPU 有些CPU有7个不同的CPU不同 了解这个概念就行,比如windows 关机是0级别 Linux系统里有0 和3,0是内核态,3是用户态 可以理解为内核态比较高级它可以干所有的事,开机关机,杀死进程等,用户态就只能一些数据的交互,它要做一些操作要调用内核态的指令,内核态可以访问所有区域的内存,用户态只能访问用户态区域的内存。

启动一个app 是发生在用户态,要产生一个线程是要和内核态打交道,这个打交道是重量级的,它需要保护线程,然后产生中断,让内核处理中断,启动新的线程,然后把结果反馈回来恢复线程,app继续执行。转了一圈,它的效率比较低

纤程在用户态上执行,不需要惊动内核态,所以纤程叫做更轻量级的线程,jvm现在暂时不支持纤程,为什么go语言在高并发中有天然优势,因为go语言在高并发时是启动一个go程,其实就是纤程。

Java在用这个概念发现不太好用于是提供了一个开源的叫做Quasar的类库

伪代码测试:

传统线程:

long 开始时间;

for(int i=0;i<10000;i++){

Thread thread new Thread(){

调用方法A();

}

thread.start();

}

long 结束时间;

System打印 时间

public void A(){

int result=0;

for(int i=0;i<10000;i++){

for(int m=0;m<1000;m++)result+=i;

}

}

纤程:

long 开始时间;

for(int i=0;i<10000;i++){

Fiber<void> fiber = new Fiber<void>(new SuspendableRunnable(){

public void run() throws SuspendExecution,InterruptedExecution{

调用方法A();A()

}

});

fiber.start();

}

long 结束时间;

System打印 时间

public void A(){

int result=0;

for(int i=0;i<10000;i++){

for(int m=0;m<1000;m++)result+=i;

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容