Netty的线程模型

当我们讨论Netty线程模型的时候,一般首先会想到的是经典的Reactor线程模型,尽管不同的NIO框架对于Reactor模式的实现存在差异,但本质上还是遵循了Reactor的基础线程模型。下面浅谈一下我对Reactor线程模型的认识

1.Reactor单线程模型,是指所有的I/O操作都在同一个NIO线程上面完成。NIO线程的职责如下

作为NIO服务端,接收客户端的TCP连接

作为NIO客户端,向服务端发起TCP连接

读取通信对端的请求或者应答消息

向通信对端发送消息请求或者应答消息

对于小容量的应用可以用单线程,但是对于高负载、大并发的应用不适用,因为性能上无法支撑

2.Rector多线程模型与单线程模型最大的区别就是有一组NIO线程来处理I/O操作,特点如下:

有专门一个NIO线程---Acceptor线程用于监听服务端,接收客户端的TCP连接请求

网络I/O操作--读、写等由一个NIO线程池负责,线程池可以采用标准的JDK线程池实现

一个NIO线程可以同时处理N条链路,但是一个链路只对应一个NIO线程,防止发生并发操作

大多数情况下,用多线程模型就可以满足性能需求,但是如果一个NIO线程负责监听和处理大量连接也有可能会存在性能问题。

3.主从Reactor多线程模型

服务端用于接收客户端连接的不在是一个单独的NIO线程,而是一个独立的NIO线程池。Acceptor接收到客户端TCP连接请求并处理完成后(可能包含介入认证等),将新创建的SocketChannel注册到I/O线程池的某个I/O线程上,由它负责SocketChannel的读写和编解码工作,可以解决一个服务端监听线程性能不足的问题,因此Netty的官方demo中,推荐使用该线程模型

时间: 2024-10-26 11:53:18

Netty的线程模型的相关文章

Netty IO线程模型学习总结

Netty框架的 主要线程是IO线程,线程模型的好坏直接决定了系统的吞吐量.并发性和安全性. Netty的线程模型遵循了Reactor的基础线程模型.下面我们先一起看下该模型 Reactor线程模型 Reactor 单线程模型 单线程模型中所有的IO操作都在一个NIO线程上操作: 包含接受客户端的请求,读取客户端的消息和应答.由于使用的是异步非阻塞的IO,所有的IO操作不会阻塞,理论上一个线程就可以处理所有的IO操作. 单线程模型适用小容量的应用.因为在高并发应用 可导致以下问题 一个线程同时处

Netty服务器线程模型概览

一切从ServerBootstrap开始ServerBootstrap 负责初始话netty服务器,并且开始监听端口的socket请求. bootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory( Executors.newCachedThreadPool(),//boss线程池 Executors.newCachedThreadPool()//worker线程池 ) ); bootstrap.set

Netty线程模型

一.Reactor模型 1.单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接: 2)作为NIO客户端,向服务端发起TCP连接: 3)读取通信对端的请求或者应答消息: 4)向通信对端发送消息请求或者应答消息 Reactor单线程模型示意图如下所示: 由于Reactor模式使用的是异步非阻塞IO,所有的IO操作都不会导致阻塞,理论上一个线程可以独立处理所有IO相关的操作.从架构层面看,一个NI

Netty系列之Netty线程模型

1. 背景 1.1. Java线程模型的演进 1.1.1. 单线程 时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一. 在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能. 1.1.2. 多线程 随着硬件性能的提升,CPU的核数越来越越多,很多服务器标配已经达到32或64核.通过多线程并发编程,可以充分利用多核CPU的处理能力,提升系统的处理效率和并发性能. 相关

【转】netty线程模型

Netty服务器线程模型概览 博客分类: netty java 一切从ServerBootstrap开始 ServerBootstrap 负责初始话netty服务器,并且开始监听端口的socket请求. Java代码   bootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory( Executors.newCachedThreadPool(),//boss线程池 Executors.newCached

Netty 线程模型

关于Java NIO Reactor模式http://my.oschina.net/xinxingegeya/blog/339027 下面是线程模型的演进 Thread per Connection Thread per Connection: 在没有nio之前,这是传统的java网络编程方案所采用的线程模型.即有一个主循环,socket.accept阻塞等待,当建立连接后,创建新的线程/从线程池中取一个,把该socket连接交由新线程全权处理.这种方案优缺点都很明显,优点即实现简单,缺点则是方

Netty:Netty 3.x 线程模型

众所周知,Netty使用了主从Reactor模式来完成CONNECT.ACCEPT.READ.WRITE操作.所以这里就从Reactor角度来分析一下Netty3的线程模型. Parent-Reactor 服务端Parent-Reactor设计 客户端Parent-Reactor设计 Sub-Reactor IO Worker设计 Parent-Reactor 服务端Parent-Reactor设计 在了解了Netty 3的源码后,对它的服务端的线程模型做了简单的总结 : Boss Execut

Netty in Action (十七) 第七章节 EventLoop和线程模型

本章节包括: 1)线程模型总览 2)Event Loop概念和具体实现 3)任务调度 4)实现细节 简单地陈述一下,对于一个操作系统,编程语言,框架,或者应用来说,线程模型对其都是至关重要的一部分,在什么时间如何创建一个线程都会对你的代码执行有很重要的影响,所以对于开发人员而言,懂得在各种线程模型里面权衡利弊就是一个很重要的事情,是直接使用线程模型本身还是通过一些框架或者语言提供的线程框架对于开发者而言都是需要选择的 在这个章节,我们将会详细地讲解Netty的线程模型,这个模型是很强大的,且易于

Netty实战七之EventLoop和线程模型

简单地说,线程模型指定了操作系统.编程语言.框架或者应用程序的上下文中的线程管理的关键方面.Netty的线程模型强大但又易用,并且和Netty的一贯宗旨一样,旨在简化你的应用程序代码,同时最大限度地提高性能和可维护性. 1.线程模型概述 线程模型确定了代码的执行方式,由于我们总是必须规避并发执行可能会带来的副作用,所以理解所采用的并发模型(也有单线程的线程模型)的影响很重要. 因为具有多核心或多个CPU的计算机现在已经司空见惯,大多数的现代应用程序都利用了复杂的多线程处理技术以有效地利用系统资源