标签:好处 关联 src alt 线程并发 选择器 内存 关联关系 体系
Java NIO 由三个核心组件构成:Selector (选择器), Channel(通道) , Buffer (缓冲区)。 虽然NIO体系还是有其它组件,比如:Pipe
,FileLock
等 它们只是与三个组件结合实际使用类。
三者关联关系:
一个线程对应一个selector, 一个selector 对应多个channel。 多个通道中可以相互切换,是根据事件event来决定使用那个channel。
单线程处理多通道的好处,处理通道所需要的线程数更少。一个线程可以处理所有的通道。在操作系统层面,线程的上下文切换是成本非常高。每个线程都会对应操作系统的内存。因此,线程数越少越好。
但随着CPU技术突破,多核超线程出现,若使用单线程来处理,有点浪费cpu资源。
channel是指可以向其写入数据或读取数据的对象。 类似于IO中的strem。但是所有数据的读写都由buffer来进行的,channel不进行任何处理。
一个stream只能是InputStream或者OutputStream。但channel是双向的,channel打开后,即可向其写入数据,也可以同时读取数据。
buffer本身就是一块内存,底层使用数组来实现。buffer非线程安全,因此,在多线程并发的环境下,当访问buffer时,需要做适当的线程控制。
标签:好处 关联 src alt 线程并发 选择器 内存 关联关系 体系
原文地址:https://www.cnblogs.com/song27/p/13160712.html