Nio编程详解

本文介绍了传统网络编程的问题,并提出使用NIO(非阻塞IO编程)作为解决方案。文章详细阐述了NIO的核心组件:Channel、Buffer和Selector的工作原理,并通过一个生动的例子帮助读者理解Selector如何协调多个Channel的读写操作。

NIO编程
1.传统的网络编程
在TCP协议中,调用accept函数时,会阻塞在那里,而且每次都需要创建一个新的线程来处理该连接,用这种方式当连接数较多时会产生大量的线程,而线程之间的切换需要耗费资源,上限较低。
2.所以我们需要引入NIO(非阻塞IO编程)

NIO编程的实现方式

1.几个核心组件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这么看很抽象。举个栗子。
selector理解为班长,read/write看做交作业/拿作业,每个channel意味着一个同学,selectionkey代表事件类别,每次只能有一个人交/拿作业,每个人需要事先告诉班长自己是拿作业还是写作业(事件的类别),每个人告诉班长自己是要拿作业还是交作业,班长知道后,根据事件类别得到每个具体的人,然后进行拿/交作业的操作。
Channel
通道 可以形象地理解成连接客户端和服务端的一个道路,双方通过这个发送和接受数据。分为ServerSocketChannel类和SocketChannel,二者的功能类似于ServerSocket和Socket,ServerSocketChannel是用来监听服务端的连接的,成功会返回一个SocketChannel。
Buffer
缓冲区,存放数据的地方。我们要把放在通道中的东西读出来,就要放到buffer中。
Selector
实现非阻塞的关键组件。Channel需要注册到selector上,selector会对注册channel进行监听。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值