2016 - 2024

感恩一路有你

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

浏览量:2248 时间:2023-04-26 08:01:29 作者:采采

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

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

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

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

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

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

最先,

然后打开Visual Studio2019,如下图所示:

第二步,

然后点击文件,扩建项目,你选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键调试运行,如下图所示:

运行结果:

编程 网页 内存 线程

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。