默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
小白初学im入门1外传系统资源(基于java)
阅读(35887) | 评论(2 收藏 淘帖
学习java的时候一开始不知道为什么很多东西都要xxx.close现在集中说一下。也是对网络编程的一种前置知识
系统资源 就是操作系统提供的资源(系统就是微软的windows 开源的linux 苹果的mac等)

比如 线程 io socket等服务是基于系统资源的  简单点说就是调用系统提供的api  并不是java自己就可以,(其他语言也是调用系统的资源)这和java没区别,如果一个单线程的系统能用java绝对不可能有多线程的 也用不了。
之所以使用io 等技术的时候需要抛异常 然后关闭资源 是因为系统资源是有限的,不关闭就有可能有耗尽的风险 或者导致系统变慢。

作为服务器在进行某些操作时,有很多人说linux币windows块快(这里人是很难感觉出来的,现在计算机的性能非常高了,应该也有例外比如windows某些地方可能快,只是说理论不谈什么好坏,都是好东西)那是因为java在用到这些系统资源的时候 系统提供的这些资源那个优化的好 或者算法好 就会快 这些应用的快慢是严重依赖系统提供的服务。

下面这些是复制的(如果侵权请联系 立马删除)
  • Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
  • Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

BIO、NIO、AIO适用场景分析:
  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS(操作系统)参与并发操作,编程比较复杂,JDK7开始支持。

可以看到aio更严重依赖操作系统资源


为什么在很多公司采用nio而不采用aio  通过比较aio的性能是最好的。但是在应用开发中 并不是完全的性能最优选而是稳定最优选 当然现在有很多好的aio框架,但是在开发im的时候还是建议选择nio的框架。如果aio不能做很好的控制出现问题的几率远大于nio。再者aio也叫nio2 就是在nio中类似与加了一个线程
在这个系列里面 我也会说原生的java aio的demo。
当然随着操作系统的对aio的支持和优化 我相信以后aio将称为主流。
技术总是进步的,以上只是个人的观点。

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:小白初学im入门1(基于java)下一篇:QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年
推荐方案
评论 2
文章不能停,要继续写
引用:JackJiang 发表于 2018-03-14 11:30
文章不能停,要继续写

我在本地组织语言  更好的逻辑  近期更新
签名: 好久不来了 现在不忙了 好好学习
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部