Selector选择器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selector选择器相关的知识,希望对你有一定的参考价值。
参考技术ASelector 一般称 为 选择器 ,也可以翻译为 多路复用器 。它是Java NIO核心组件中的一个,用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接
学习Selector之前,需要先了解阻塞IO和非阻塞IO的区别。以烧水为例,出场人物:老王,普通水壶和响水壶。
通过以上故事,我们得到了同步和异步,阻塞和非阻塞几个概念:
IO 包中的类是典型的阻塞设计,这无法发挥的性能,就需要使用多线程来解决阻塞问题 。
在 NIO 中,Selector的作用就是用来轮询每个注册的Channel,一旦发现Channel有注册的事件发生,便获取事件然后进行处理 。
示例
Channel 必须是非阻塞的 所以 FileChannel 不适用 Selector,因为 FileChannel 不能切换为非阻塞模式,更准确的来说是因为 FileChannel没有继承SelectableChannel。Socket channel可以正常使用。
SelectionKey 可以称为 interest集合 。 意思是在 通过Selector监听Channel时对什么事件感兴趣 。通道触发了一个事件意思是该事件已经就绪。
如果需要不止一种事件,使用或运算符即可,如下:
一个SelectionKey键表示了一个特定的通道对象和一个特定的选择器对象之间的注册关系
以上是关于Selector选择器的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫之Scrapy框架系列(10)——Scrapy选择器selector
Python爬虫之Scrapy框架系列(10)——Scrapy选择器selector