Grizzly core configuration

核心配置

核心框架的主要配置点是传输实例(Transport instances)及其关联的线程池(thread pools)。通过 NIOTransportBuilder 可以配置这两个实体。

传输配置

正如有针对TCP和UDP的具体 NIOTransport 实现一样,也有两种具体的 NIOTransportBuilder 实现。
每个 NIOTransportBuilder 实现都公开了每种传输所独有的可配置功能。以下内容描述了所有 NIOTransports 共有的配置属性,
然后描述了 TCP 和 UDP NIOTransport 实现的属性。

NIOTransportBuilder属性
NIOTransportBuilder属性描述
workerThreadPoolConfig此属性公开ThreadPoolConfig实例,该实例允许配置将由此构建器构造的传输使用的工作线程池(work thread pool)。注意:根据所使用的IOStrategy,此值可以为null。
selectorThreadPoolConfig此属性公开了ThreadPoolConfig实例,该实例允许配置将由此构建器构造的传输使用的选择器/内核线程池。(selector/kernel thread pool)
IOStrategy设置此传输将使用的IOStrategy。请注意,在开始传输之前更改此值可能会对workerThreadPoolConfig属性的返回值产生影响。如果未显式设置任何值,则将使用WorkerThreadIOStrategy。有关Grizzly 2.3随附的每个具体IOStrategy的详细信息,请参见IOStrategies的部分。
memoryManager设置此传输使用的MemoryManager。如果未显式设置任何值,则使用的MemoryManager将为NIOTransportBuilder.DEFAULT_MEMORY_MANAGER。有关MemoryManager系统的详细信息,请参阅“内存管理”部分。
selectorHandler设置此传输使用的SelectorHandler。如果未显式设置任何值,则使用的SelectorHandler将是NIOTransportBuilder.DEFAULT_SELECTOR_HANDLER。有关SelectorHandler的详细信息,请参见“传输和连接”部分。
selectionKeyHandler设置此传输要使用的SelectionKeyHandler。如果未显式设置任何值,则使用的SelectionKeyHandler将为NIOTransportBuilder.DEFAULT_SELECTION_KEY_HANDLER。有关SelectionKeyHandler的详细信息,请参见“传输和连接”部分。
attributeBuilder设置此传输使用的AttributeBuilder。如果未显式设置任何值,则使用的AttributeBuilder将为NIOTransportBuilder.DEFAULT_ATTRIBUTE_BUILDER。
NIOChannelDistributor设置此传输使用的NIOChannelDistributor。有关NIOChannelDistributor的详细信息,请参见“传输和连接”部分。
processor设置此传输使用的处理器。
processorSelector设置此传输使用的ProcessorSelector。
readBufferSize设置每个连接分配的缓冲区大小,以读取传入数据。
writeBuffersSize设置每次连接将应用的缓冲区大小,以写入传出数据。
TCPNIOTransportBuilder属性
TCPNIOTransportBuilder属性描述
clientSocketSoTimeout以毫秒为单位(客户端模式),SO_TIMEOUT 以指定的超时 enable/disable SO_TIMEOUT。
connectionTimeout在建立连接之前可能花费的时间,超时时间(以毫秒为单位)。
keepAliveEnable/disable SO_KEEPALIVE.
linger使用指定的延迟时间(以秒为单位)启用/禁用SO_LINGER。最大超时值(maximum timeout value)是特定于平台的。该设置仅影响套接字关闭。
reuseAddress启用/禁用SO_REUSEADDR套接字选项。当TCP连接关闭时,连接可能会在连接关闭后的一段时间内保持超时状态(通常称为TIME_WAIT状态或2MSL等待状态)。对于使用众所周知的套接字地址或端口的应用程序,如果在超时状态下存在涉及套接字地址或端口的连接,则可能无法将套接字绑定到所需的SocketAddress。
serverConnectionBacklog指定最大未建立连接队列长度。
serverSocketSoTimeout以指定的时间 Enable/disable SO_TIMEOUT,以毫秒为单位(服务器模式)
tcpNoDelay启用/禁用TCP_NODELAY(禁用/启用Nagle算法)。
temporarySelectorIO允许指定TemporarySelectorIO实例,以帮助模拟阻塞IO。
optimizedForMultiplexing控制写入连接的行为。如果启用,则无论当前线程是否可以直接写入连接,所有写入都将传递到异步写入队列。当实际发生写入时,传输将尝试从写入队列中写入尽可能多的内容。默认情况下禁用此选项。
maxAsyncWriteQueueSizeInBytes指定基于每个连接的异步写入队列的大小(以字节为单位)。如果未指定,则该值将配置为系统套接字写缓冲区大小的四倍。将此值设置为-1将使队列不受限制。
UDPNIOTransportBuilder属性
UDPNIOTransportBuilder属性描述
connectionTimeout在操作超时之前建立连接可能花费的时间(以毫秒为单位)。
reuseAddress启用/禁用SO_REUSEADDR套接字选项。当TCP连接关闭时,连接可能会在连接关闭后的一段时间内保持超时状态(通常称为TIME_WAIT状态或2MSL等待状态)。对于使用众所周知的套接字地址或端口的应用程序,如果在超时状态下存在涉及套接字地址或端口的连接,则可能无法将套接字绑定到所需的SocketAddress。
temporarySelectorIO允许指定TemporarySelectorIO实例,以帮助模拟阻塞IO。
线程池配置

Grizzly的线程池配置由ThreadPoolConfig对象管理:

ThreadPoolConfig属性描述
queue要使用的任务队列实现。
queueLimit可以排队的最大待处理任务数。
threadFactoryThreadFactory 是一个用于创建新的线程的线程池
poolName该线程池的名称。
priority分配给每个线程的优先级。这将覆盖由指定ThreadFactory分配的任何优先级。
corePoolSize初始化线程池时需要一起创建的线程的初始数量。
maxPoolSize该线程池可以维护的最大线程数
keepAliveTime线程可以保持空闲并等待新任务执行后释放的最长时间。可以使用自定义时间单位。
transactionTimeout在发送中断信号之前,可能允许线程运行单个任务的最长时间。可以使用自定义时间单位。

线程池配置相当简单。但是,应该注意,Grizzly在内部具有多个线程池实现:SyncThreadPool,FixedThreadPool和QueueLimitedThreadPool。选择哪种实现取决于配置。以下各节描述了每个线程池实现

FixedThreadPool

当queueLimit属性小于零且最大和核心池大小相同时,将选择此池。在执行任务时,FixedThreadPool没有同步,因此它提供了更好的性能。

QueueLimitedThreadPool

当queueLimit属性大于零且最大和核心池大小相同时,将选择此池。QueueLimitedThreadPool是FixedThreadPool的扩展,因此,如果不提供无限制的任务队列,它就能提供与FixedThreadPool相同的优点。

SyncThreadPool

当其他线程池的标准都不适用时,将选择此池。该线程池确实具有同步功能,可以对线程创建的决策进行精确控制。

例子

以下是一些使用TCPNIOTransportBuilder配置传输和/或线程池的示例。

final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
final TCPNIOTransport transport = builder.build();

使用所有默认配置值创建一个新的TCPNIOTransport。

final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
final TCPNIOTransport transport = builder.setIOStrategy(SameThreadIOStrategy.getInstance()).setTcpNoDelay(true).build();

使用SameThreadIOStrategy创建一个新的TCPNIOTransport实例,并将tcp-no-delay设置为true。请注意,配置调用可以链接。

final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder.newInstance();
final ThreadPoolConfig config = builder.getWorkerThreadPoolConfig();
config.setCorePoolSize(5).setMaxPoolSize(5).setQueueLimit(-1);
final TCPNIOTransport transport = builder.build();

由于没有队列限制并且核心池和最大池大小相同,因此本示例将配置TCPNIOTransport以使用FixedThreadPool实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值