请教 JAVA 服务器现在是怎么处理大量的连接的?

2015-11-17 13:10:58 +08:00
 ncisoft
由于线程的缺陷, JAVA 在处理大量连接方面存在诸多限制,然后各种反人类的技术,如 Erlang node.js scala 开始大行其道,还有 golang 也出来了。有段时间没跟踪技术了,请教现在是什么情况,是否有新技术出现解决这个问题了?
7859 次点击
所在节点    Java
50 条回复
aisk
2015-11-17 13:22:37 +08:00
有线程池的情况下多线程也不是什么大问题。
garfeildma
2015-11-17 13:25:22 +08:00
netty 不是很好么
raysonx
2015-11-17 13:28:11 +08:00
不谈语言下的实现,现在比较高效地处理大量连接一般都是用 Linux 下的 epoll 系统调用。让系统内核管理连接,当某个连接发来数据时,回调你的程序处理,这样既可以避免为每个用户单独创建线程加大开销,也不用去浪费 CPU 时间去轮询每一个套接字。
akira
2015-11-17 13:31:56 +08:00
不要指望一个语言打天下呀
helloworldwt
2015-11-17 13:38:03 +08:00
java 线程池+nio 技术可以应对一些情况
canesten
2015-11-17 13:43:56 +08:00
tedeyang
2015-11-17 13:48:21 +08:00
楼主好好研究 Java7 的 AIO 吧。也可以用 Netty
HunterPan
2015-11-17 13:49:49 +08:00
复用复用复用
feilaoda
2015-11-17 14:32:02 +08:00
> 由于线程的缺陷, JAVA 在处理大量连接方面存在诸多限制

如果仅是大量链接,不需要新技术也没什么问题。
要并发,有一堆可以参考, netty , AIO ,还有 scala 的 akka
ncisoft
2015-11-17 14:33:40 +08:00
谢谢各位的回复, java 技术进步得还是不够呀
ncisoft
2015-11-17 14:36:14 +08:00
@feilaoda 如果仅仅是处理静态资源,要 java 干什么, nginx 就够用了。现在要解决的是大量连接和后台大量 java servlet 线程之间的矛盾
ryd994
2015-11-17 14:50:07 +08:00
@ncisoft 如果资源够的话就多服务器, Nginx 做负载均衡
资源不够的话就 Nginx 控制并发,其余的等待。

另外,如果大量连接是由于客户端上传下载慢的话,可以增加 Nginx 的 buffer ,由 Nginx 负责收发,等数据齐了以后一次性发到后端,返回给客户端的时候也是同理。

当然,你有时间有精力维护异步代码的话,异步自然是更好。
youxiachai
2015-11-17 15:10:08 +08:00
其实..大部分人...都用不上处理大量链接吧....
ncisoft
2015-11-17 15:13:14 +08:00
@youxiachai 对,我只是作为一个技术问题探讨
hantsy
2015-11-17 15:16:21 +08:00
看看 Netflix 的技术架构和开源项目( Spring Cloud 现在全部集成了 NetFlix 开源项目)就明白了,,,处理那种高并发复杂场景怎么可能一两种技术就可以解决的。
martifact
2015-11-17 15:25:39 +08:00
现在面向线程的模型都不怎么用了吧, 都是基于事件的,把事件和处理调度到线程池。 Erlang 和 Scala 的 Actor 模型,通过消除数据竞争提高并发, Go 自己实现调度。
canesten
2015-11-17 15:31:12 +08:00
@ncisoft
仅仅是 servlet 么?可以试试基于 netty 的 undertow
ncisoft
2015-11-17 16:07:49 +08:00
@canesten undertow 有点意思,谢谢
dozer47528
2015-11-17 16:16:15 +08:00
odirus
2015-11-17 16:20:35 +08:00
Netty+1 ,话说我现在正在写 Netty 为基础的项目,挺好用的,而且实际通过工具分析来看,内存消耗、 CPU 消耗都非常满意。

更优秀的地方就是 Netty 实现了大部分通信协议,从 TCP 到 HTTP ,以及中间的很多协议。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/236748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX