java io nio pio_Netty之BIO(同步阻塞IO)、PIO(偽異步阻塞IO)、NIO(異步非阻塞IO)、AIO(異步非阻塞IO)、Netty...

學習書籍:Netty權威指南

多種IO方式的比較:

1、BIO(同步阻塞IO)

使用ServerSocket綁定IP地址和監聽端口,客戶端發起連接,通過三次握手建立連接,用socket來進行通信,通過輸入輸出流的方式來進行同步阻塞的通信

每次客戶端發起連接請求,都會啟動一個線程

線程數量:客戶端並發訪問數為1:1,由於線程是JAVA虛擬機中非常寶貴的資源,一旦線程數急劇增加,系統性能會急劇下降,導致線程棧溢出,創建新的線程失敗,並最終導致宕機

所以在JDK1.4之前,人們想到了一種方法,即PIO方式

2、PIO(偽異步阻塞IO)

使用線程池來處理客戶端的請求

客戶端個數:線程池最大線程數=M:N,其中M遠大於N

在read和write的時候,還是IO阻塞的,只是把每個線程交由線程池來控制管理

3、NIO(異步阻塞IO)

用NIO方式處理IO

使用多路復用器Selector來輪詢每個通道Channel,當通道中有事件時就通知處理,不會阻塞

使用相當復雜

4、AIO(真正的異步非阻塞IO)

NIO2.0引入了新的異步通道的概念,不需要使用多路復用器(Selector)對注冊通道進行輪詢即可實現異步讀寫,從而簡化了NIO編程模型

使用Netty框架進行編程步驟

1、構建事件處理池

2、使用引導程序關聯事件處理池、通道、事件處理器

3、綁定端口服務

4、等待操作完成

5、關閉事件處理池

幾種IO的功能和特性對比

527b181841ee988d9cc2660448f39e9b.jpe

按照書上的例子碼了一遍:

服務端:

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值