网络编程方面针对selecto和channel的感悟

  今天突发奇想写了一下selector和socketChannel的几行代码,对channel和selector有了一些比较有意思的理解。

其实今天感悟的是selector解决的根本性问题,解决的是网络程序的连接数量问题,在没有出现这个技术之前,一个连接需要有一个线程维持连接,占用资源多,连接越多,开启的线程越多。

而使用selector却可以使用一个线程来维持很多连接,减轻了操作系统的线程的占用,有效提高了执行效率。

 

从jdk提供的api来看,socketChannel需要注册一个selector,然后对selector进行死循环式的不断的探测,看是否有读,写,连接,被连接等四种事件的发生。

这样,将以前一个线程维护一个连接的阻塞,改为了很多个连接的只需要最多阻塞一个线程。

实际上,selector只是采集socketChannel的一些事件,而这些事件本身的处理,还是需要通过socketChannel来进行,因为:

1.实际上,socketChannel才是网络协议栈存放数据的根本地方,才是网络协议栈发送数据的源头。

2.网络协议栈操作最终还是socketChannel,而selector仅仅是操作完成之后,发给selector一个通知而已。

 

明白了这些,就明白了selector和socketChannel的作用了。

selector是一种被动接受socketChannel四种事件的组件,依赖此组件,我们知道了某个socketChannel具有了我们需要处理的事件,我们采取行动,从socketChannel操作从而应对这个事件的发生。

socketChannel是网络连接的抽象,具有读写等功能。仅此而已罢了。

转载于:https://www.cnblogs.com/weiguangyue/p/9893344.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值