java nio 阻塞_Java NIO和传统阻塞IO

传统的阻塞IO我就不多说,因为之前我发过几篇使用传统阻塞IO做QQ聊天写的几篇文章,服务器端每得到一个新的连接就开一个线程,在这个线程中接收数据方向是阻塞的,​​

这种方式对性能的开销是非常大的,总结来说如果连接的数量非常多,并且每个连接发送的数据非常少的情况,不要使用传统阻塞IO,推荐使用Java

NIO模式​

传统的阻塞IO适用于连接的数量非常少,且传输的数据量非常大情况,这种可以考虑使用传统的阻塞IO​​

JDK的无阻塞I/O有效解决多线程服务器线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对

每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。​​

Java NIO 中select()阻塞,等待有事件发生唤醒​

Java NIO

中,一般ServerSocketChannel只注册accept事件,对于read和write事件是注册到accept的SocketChannel中的​

所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回。所以异步的同义语是非阻塞(None

Blocking)。​

通道介绍:这里主要介绍ServerSocketChannel和

SocketChannel.它们都是可选择的(selectable)通道,分别可以工作在同步和异步两种方式下(注意,这里的可选择不是指可以选择两种工作方式,而是指可以有选择的注册自己感兴趣的事件)。可以用channel.configureBlocking(Boolean

)来设置其工作方式。与以前版本的API相比较,ServerSocketChannel就相当于ServerSocket(ServerSocketChannel封装了ServerSocket),而SocketChannel就相当于Socket(SocketChannel封装了Socket)。

FR:徐海涛(Hunk Xu)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值