JAVA minaio模型_Mina的线程模型

本文详细介绍了JAVA Mina的NIO模型,包括IoAcceptor线程负责接收客户端连接,IoConnector线程用于与服务器建立连接,而IoProcessor线程则处理数据的接收和发送。I/O processor线程数量可配置,通常为CPU核心数+1。此外,还讨论了I/O Handler线程的处理方式以及线程池的配置和使用。
摘要由CSDN通过智能技术生成

在Mina的NIO模式中有三种I/O工作线程(这三种线程模型只在NIOSocket中有效,在NIO数据包和虚拟管道中没有,也不需要配置):

IoAcceptor/IoConnector线程

IoProcessor线程

IoHandler线程

812ffc1493e14043290ba59f67c1b97d.png

一、Acceptor  thread

该线程的作用是接收客户端的连接,并将客户端的连接导入到I/O processor线程模型中。所谓的I/O processor线程模型就是Mina的I/O processor thread。Acceptorthread在调用了Acceptor.bind()方法后启动。IoAcceptor用于监听客户端的连接,每监听一个端口建立一个线程。每个Acceptor只能创建一个Acceptor thread,该线程模型不能配置,它由Mina自身提供。

二、Connector thread

该线程模型是客户端的连接线程模型,它的作用和Acceptor thread类似,它将客户端与服务器的连接导入到I/O processor线程模型中。IoConnector用于与服务端建立连接,每连接一个服务端就建立一个线程。同样地,该线程模型也是由Mina的客户端自动创建,该线程模型也不能进行配置。

三、I/O processor thread

该线程模型的主要作用就行接收和发送数据,所有的IO操作在服务器与客户端的连接建立后,所有的数据的接收和发送都是有该线程模型来负责的,知道客户端与服务器的连接关闭,该线程模型才停止工作。该线程模型可以由程序员根据需要进行配置。该线程模型默认的线程的数量为cpu的核数+1。若你的cpu为双核的,则你的I/O processor线程的最大数量为3,同理若你的若你的cpu为四核的,那么你的I/O processor线程的最大数量为5。

由上面的内容我们可以知道在Mina中可以配置的线程数量只有I/Oprocessor,对于每个IoService再创建其实例的时候可以配置该IoService的I/Oprocessor的线程数量。在

SokcetConnector和SocketAccpetor中I/OProcessor的数量是由CPU的核数+1来决定的。

配置如下:

/***

*配置SocketAcceptor监听器的I/OProcessor的线程的数量

*此处的I/OProcessor的线程数量由CPU的核数决定,但Acceptor

*的线程数量只有一个,也就是接收客户端连接的线程数只有一个,

*Acceptor的线程数量不能配置

**/SocketAcceptor acceptor= new SocketAcceptor(Runtime.getRuntime().availableProcessors()+1,Executors.newCachedThreadPool());/***

*配置SocketConnector监听器的I/OProcessor的线程的数量

*此处的I/OProcessor的线程数量由CPU的核数决定,但SocketConnector

*的线程数量只有一个,也就是接收客户端连接的线程数只有一个,

*Acceptor的线程数量不能配置

**/SocketConnector connector= new SocketConnector(Runtime.getRuntime().availableProcessors()+1,Executors.newCachedThreadPool());

四、I/O Handler thread

当我们在过滤器链中没有添加“threadPool”过滤器,则业务逻辑处理和IoProcessor使用同一个线程。如果设置了“threadPool”过滤器,则使用设置的线程池产生线程进行业务逻辑处理,过滤器的配置如下:

acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));

五、各种线程的产生

当 IoAcceptor/IoConnector实例创建的时候,同时一个关联在IoAcceptor/IoConnector上的IoProcessor线程池也被创建。

当IoAcceptor/IoConnector建立套接字(IoAcceptor 的bind()或者是IoConnector 的connect()方法被调用)时,从线程池中取出一个线程,监听套接字端口。

当 IoAcceptor/IoConnector监听到套接字上有连接请求时,建立IoSession 对象,从IoProcessor池中取出一个IoProcessor线程执行IO处理。

如若过滤器中配置了“threadPool”过滤器,则使用此线程池建立线程执行业务逻辑(IoHandler)处理,否则使用IoProcessor线程处理业务逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值