java bio 和 nio

BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开,每个线程都会有自己的栈内存,会导致内存过大,stackmemryflow,增大cpu线程切换压力。

NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

具体可类比场景为:

BIO:一家餐馆,每来一个客人就专门指派一个服务员为其服务,这样虽然服务质量好了,但是服务员过多,餐厅都挤不下去了,stackmemeryflow,每个客人除了点菜,买单需要服务外,其他用餐时间大部分不需要服务,资源浪费,服务员过多,调度难度大。

NIO:餐馆新增一个前台(selector)服务员,餐桌(selectorkey)安装一个铃,前台安装一个传呼反应器(reactor),客人来人,前台负责登记,客人需要服务,按铃讲需求,前台登记,所有需求服务由前台调度,10个服务员(线程池),有需求了就叫服务员去服务,服务完回到前台待命!

类比到netty:

1.chinel 相当于客户,前台相当于server端的boss,反应器相当于work,放映器上面有对应的每个桌号的接收器,客人来了,boss接收,安排到具体桌位上,并且登记注册到反应器上面(EventLoopGroup),反应器上面的桌号灯接收器启动(EnentLoop),chinel通过按铃这个通道(chinelpiple)进行输入呼叫自己的需求,发出声音,前台(selector)记录下来,安排服务员去服务(ServerChinnel) 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也...
    闪电是只猫阅读 8,360评论 0 7
  • 同步和异步区别:有无通知(是否轮询) 堵塞和非堵塞区别:操作结果是否等待(是否马上有返回值),只是设计方式的不同 ...
    错位的季节阅读 5,353评论 0 2
  • nio 同步: 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步: 委托一小弟拿...
    CatherYan阅读 4,760评论 1 12
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,496评论 11 349
  • 入职新公司,做着ui/ue的工作,却有一颗产品的心,不懂用研的设计不是好产品这句话都快说烂了,只有细分的职业没有细...
    有料阅读 3,161评论 1 3

友情链接更多精彩内容