Netty从入门到精通二——NIO入门

本文介绍了Java的BIO(阻塞IO)、NIO(非阻塞IO)和AIO(异步IO)模型,特别是NIO的Reactor模式和Selector机制,以及Netty框架在简化API、功能扩展和性能提升方面的优点。
摘要由CSDN通过智能技术生成

第二章 NIO入门

传统BIO编程:

Java BIO(Blocking IO),是阻塞式IO。

采用BIO模式的网络连接,需要先在服务端启动一个ServerSocket进行监听,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后先咨询服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端线程会等待请求结束后才继续执行。

采用BIO通信模型的服务端,由一个独立的Acceptor线程负责监听客户端的连接每一个客户端的连接会创建一个对应的线程进行处理,处理完成后线程销毁。

每有一个新客户端请求接入就要创建一个新的线程处理客户端连接,传统BIO无法满足高性能、高并发的场景。

伪异步I/O编程:

为了改进一线程对应一连接模型,通过线程池或者消息队列处理多个客户端的请求接入,线程池线程数N,客户端个数M,M可以远远大于N,可以通过线程池灵活地调配线程资源,防止海量并发接入导致线程耗尽。

伪异步I/O具体实现:伪异步I/O模型将客户端的socket封装成一个Task投递到后端的线程池中进行处理,JDK的线程池维护一个消息队列和N个活跃线程,对消息队列中的任务进行处理。

由于线程池和消息队列都是有界的,无论客户端并发连接数多大,都不会导致线程个数过于膨胀或内存溢出。

伪异步I/O的读和写操作都是同步阻塞的,仅仅只是对BIO线程模型的一个煎蛋优化,无法解决同步I/O导致的通信线程阻塞问题。</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值