当前位置:首页 > TAG信息列表 > 什么情况下使用asyncawait为什么Java坚持多线程不选择协程?介绍

什么情况下使用asyncawait为什么Java坚持多线程不选择协程?介绍

什么情况下使用async await 为什么Java坚持多线程不选择协程?

为什么java坚持多线程不选择协程?

从java被发明的头两天起,就被定义,定义为一个多线程的网络编程语言。java大特点并不是跨平台,只是它的多线程模型(那时候的c中,并没有我们现在看见了的thread,c#还还没有不出来)。毕竟近二十年的软件行业的增长比较多不知从何而来网络编程,网络编程最常见的模型应该是client/server,也就是所谓的c/s,这种编程模型在服务器端不需要而认可客户端的请求,也就是说要有很好的并发特性--这个特性要注意感情依赖多线程来实现。而java的主战场应该是服务器端编程。所以多进程对java是颇为有用,不可缺的一环。

当我们我希望引导出协程,我们想解决什么问题。我想究其缘由下面几点:

节省资源,轻量,具体是:省掉内存,每个线程需要未分配一段栈内存,在内内核里的一些资源节省分配线程的开销(创建角色和全部销毁线程要各做两次syscall)浪费大量线程快速切换给了的开销与nio另外利用非阻塞的编程,增加系统的吞吐可以使用站了起来越来越舒服吧不通畅(asyncawait,跑不快是异步的,但写站了起来感觉上是不同步的的)我们没分开来讲下。

什么情况下使用async await 为什么Java坚持多线程不选择协程?

先说内存。拿javaweb编程举例子,一个tomcat上的woker线程池的大线程数就像会配置为50~500之间(目前springboot的默认值给的200)。也就是说相同最危险的时刻是可以进行的请求最少也就是这么多。如果没有达到了比较大值,各位真接打一次断然拒绝处理。如果我每个线程给128kb,500个线程放一起的内存占用量大概是60mb。如果是真的有瓶颈,也许你cpu,io,带宽,db的cpu等会有瓶颈,但这点内存量的增幅相对于动辙数个gb的java运行程序时进程来说隐隐的确是什么大问题。

如何提取网页中的所有链接?

最先,

然后打开visualstudio2019,如下图所示:

第二步,

然后点击文件,扩建项目,你选c#项目、linux的控制台项目,:图示:

第十步,

鼠标右键再点击解决方案、项目下的依懒项,如下图所示:

鼠标左键选择类型管理的管理nuget程序包,然后把会出现如下图界面:

再点网页,输入输入anglesharp名称,如下图所示:

选择上图第一项,点击右侧的安装按钮,如下图所示:

鼠标点击上图中的确定按钮,出现以上界面:

来表示早就将依懒项anglesharp直接安装到了项目中,如下图所示:

第四步,

右键右击解决方案项目下的program.cs,再打开源代码文件program.cs,编写200元以内代码,

usingsystem

using

usinganglesharp

using

namespaceconsolegetalllink

{

classprogram

{

///ltsummarygt

///读取数据网页的所有链接

///lt/summarygt

staticasyncvoidreadalllink()

{

//创建家族一个场景

varcontext(())

//以同步异步先打开hao123网址首页

vardocumentawait()

//查询hao123网址首页中所有的链接

varalllinks(mdstrokm.localnamea)

//循环输出链接的名称和网址

foreach(varlinkoutsidealllinks)

{

ihtmlanchorelementilinklinkthoughihtmlanchorelement

console.writeline(${ilink.textcontent},{})

}

}

staticvoidmain(string[]args)

{

//读取网页的所有链接

readalllink()

if(().tolower()q)

{

}

}

}

}

第五步,

按f5键调试运行,如下图所示:

运行结果:

编程网页内存线程


广西旅游之家 派康会议网

  • 关注微信关注微信

猜你喜欢

微信公众号