2016 - 2024

感恩一路有你

携程 java能实现go语言的协程吗?

浏览量:2155 时间:2021-03-11 15:10:03 作者:admin

java能实现go语言的协程吗?

是或否的答案是肯定的,但估计要实现它需要很长时间。coroutine的设计得到了许多语言的支持,例如go中的gooutine和Python中的async。但是,您会发现,除了go之外,其他语言的协同过程中还有许多缺陷。协同过程中最重要的一点是不能被阻塞,这将直接影响协同过程的调度。然而,一种语言已经发展了十多年,它的历史负担是可以想象的,它不能被世代更新。因此,新语言在这方面相对更好。

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

Java从发明的第一天起就被定义为多线程网络编程语言。Java最大的特点不是跨平台,而是它的多线程模型(当时,C中没有线程,正如我们现在看到的,C还没有出现)。因为近二十年来软件产业的增长主要来自于网络编程。网络编程中最常见的模式是客户机/服务器(client/server,又称C/s),这种编程模式需要在服务器端同时接受客户机的请求,即具有良好的并发特性,主要依赖于多线程技术。Java的主战场是服务器端编程。因此,多线程技术对Java来说是非常重要和不可缺少的。

当我们要引入协处理时,我们要解决哪些问题。我认为这只不过是以下几点:

节省资源,重量轻,具体来说:节省内存,每个线程需要分配一段堆栈内存,内核中的一些资源,节省分配线程的开销(创建和销毁线程每次需要做一个系统调用),节省了线程切换带来的大量开销,配合NiO实现无阻塞编程,提高了系统的吞吐量,使用起来更方便。另外,async await(异步运行,但写起来感觉是同步的)我们分开来谈。

让我们从记忆开始。以javaweb编程为例,Tomcat上woker线程池的最大线程数一般配置在50到500之间(spring boot的默认值是200)。也就是说,可以同时接受的请求太多了。如果超过最大值,请求将被拒绝。如果每个线程提供128KB,则500个线程的内存消耗约为60MB。如果存在瓶颈,可能在CPU、IO、带宽、DB-CPU等方面存在瓶颈,但是对于通常为数GB的Java运行时进程来说,内存量的增加似乎不是一个大问题。

携程 携程java 携程java面试题

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