Netty Bootstrap
Bootstrap在Netty中相当于一个组织者的角色,负责初始化装配和启动。
Bootstrap在Netty中相当于一个组织者的角色,负责初始化装配和启动。
在Java中,对于异步操作结果的获取抽象出了一个接口Future<V>
,它提供了一些方法来检查或等待操作是否完成,以及获取操作的结果,同时还提供了取消操作的能力,以及提供了检测操作是正常结束还是被取消的方法。不过如果操作已经完成了,就不能再对其进行取消了。在某些场景下,如果只是想借助Future
实现操作取消的能力,而不关心操作结果,那么可以返回空即可。
A
Future
represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve the result of the computation.
The result can only be retrieved using methodget
when the computation has completed, blocking if necessary until it is ready. Cancellation is performed by thecancel
method. Additional methods are provided to determine if the task completed normally or was cancelled. Once a computation has completed, the computation cannot be cancelled. If you would like to use aFuture
for the sake of cancellability but not provide a usable result, you can declare types of the formFuture<?>
and returnnull
as a result of the underlying task.
在Java中,任务执行的主要抽象不是Thread
,而是Executor
,它提供了一种标准的方式将任务的提交过程与执行过程解耦开来,为灵活而强大的异步任务执行框架提供了基础,线程池ThreadPoolExecutor
便是在此基础上实现的一套异步执行框架。
Netty也在Executor
的基础上自定义实现了一套高性能的任务执行框架,本文尝试从I/O事件执行器NioEventLoopGroup
作为切入点对其中的部分源码做一些分析,希望能从别人的设计中汲取一些思路和启发。建议在分析Netty中的任务执行机制之前先对Java中原生的任务执行框架有所了解,可以参考笔记:
Netty 中的通道 Channel 是对Java原生网络编程Api的封装,以TCP编程为例 ,在java中,有两种常用方式:
ServerSocket
/Socket
来代表服务端和客户端;ServerSocketChannel
/SocketChannel
来代表服务端与客户端;在Netty中,分别进行了封装:
OioServerSocketChannel
/OioSocketChannel
对ServerSocket
/Socket
进行了封装;NioServerSocketChannel
/NioSocketChannel
对ServerSocketChannel
/SocketChannel
进行了封装;封装主要有两个方面,首先通过ChannelConfig
来封装与Channel相关的配置,然后将对Channel的操作抽象成一个接口ChannelHander
,并通过链表的形式来进行组织,以便定义操作的顺序,本文尝试从这两个角度对Netty中的Channel进行一些分析。
操作系统负责对计算机资源进行管理,并对上层应用提供支持。其核心是操作系统内核空间,独立于应用程序,可以访问受保护的内存空间以及底层硬件设备。为了保证内核的安全,避免用户进程直接操作内核,因此将内存空间划分为两部分,即内核空间和用户空间。
由于物理规律对半导体器件的限制,传统单处理机通过提高主频提升性能的方法受到制约,不得不转向并行处理体系结构。下面主要介绍一些并行性相关的概念,然后分别讨论多线程和超线程处理机、多处理机和多核处理机。