打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
多线程模型适用于处理短连接,且连接的打开关闭非常频繁的情形,但不适合处理长连接,原因是什么?

首先我们至少得知道什么连接吧?

网络通信的七层协议自不必说,是我们入门互联网一开始就要学习的,HTTP协议是应用层协议,传输层和网络层分别为TCP,IP协议!

也就是说我们建立连接起码需要TCP协议的三次握手,认证通过之后client和server之间才能保证数据传输,才算是连接上了,而断开连接的时候需要四次挥手,是一个连接断连(close)的过程!





那么短连接和长连接又有什么区别呢?

短连接:经过client发起连接,开始认证(三次握手),数据传输,连接关闭(close)!

长连接:经过client发起连接,开始认证,数据传输,探测连接,数据传输。。。。连接关闭!

短连接追求的是每次通信之后,就断开连接,能避免长时间连接对server性能的开销,而长连接是在建立之后,只有客户端发起关闭请求,或者服务端探测不到客户端的响应以后才进行连接的关闭,这样长连接就不需要多次的创建和销毁连接,节省创建开销!

再看看多线程,JAVA的多线程模型如果对于每一次的连接都需要创建一个线程来维护连接,如果为长连接的时候,线程不能释放,按照每个线程1M的内存消耗,8G的服务器顶多也只能支撑几千个连接,更多的连接请求将把服务器撑爆!

而如果处理短链接,最好使用线程池,避免关闭连接的时候线程释放不及时,造成内存泄露,使用线程池可以保证线程复用,在一定量的连接里,性能更好!

单就连接来看,因为IP协议的限制,最大的连接数为2的48次方,但是假设单单的连接使用内存来看,假设只使用了10k内存,那么一台8g内存的机器也只能支持百万连接,再加上程序保持连接的线程,线程中的对象消耗等,高并发状况下的可处理连接就少的可怜了,所以多线程处理短连接更有优势一些!

当然现在的web服务器处理长连接的方法多如牛毛,避免大量线程创建的方法避不开reactor模型,比如netty框架

区别于多线程的处理方式,reactor模型使用一个线程(当然现在也会加上监控线程啥的),不断的轮询连接,有数据传输的情况下才进行处理,性能极好!

这种多路复用的模型很是复杂,不在这个回答的范围内,改天分享!更多的技术分享,敬请关注。。。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
多线程
网络服务器设计的模型及一些设计方法
大郎!快起来看多线程啦!贰
线程安全总结(二)
C++ 新特性学习(八) — 原子操作和多线程库[多工内存模型]
JVM内存结构、内存模型 、对象模型那些事
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服