Grizzly core configuration
核心配置
核心框架的主要配置點是傳輸實例(Transport instances)及其關聯的線程池(thread pools)。通過 NIOTransportBuilder 可以配置這兩個實體。
傳輸配置
正如有針對TCP和UDP的具體 NIOTransport 實現一樣,也有兩種具體的 NIOTransportBuilder 實現。
每個 NIOTransportBuilder 實現都公開了每種傳輸所獨有的可配置功能。以下內容描述了所有 NIOTransports 共有的配置屬性,
然后描述了 TCP 和 UDP NIOTransport 實現的屬性。
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屬性
| clientSocketSoTimeout | 以毫秒為單位(客戶端模式),SO_TIMEOUT 以指定的超時 enable/disable SO_TIMEOUT。 |
| connectionTimeout | 在建立連接之前可能花費的時間,超時時間(以毫秒為單位)。 |
| keepAlive | Enable/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屬性
| connectionTimeout | 在操作超時之前建立連接可能花費的時間(以毫秒為單位)。 |
| reuseAddress | 啟用/禁用SO_REUSEADDR套接字選項。當TCP連接關閉時,連接可能會在連接關閉后的一段時間內保持超時狀態(通常稱為TIME_WAIT狀態或2MSL等待狀態)。對于使用眾所周知的套接字地址或端口的應用程序,如果在超時狀態下存在涉及套接字地址或端口的連接,則可能無法將套接字綁定到所需的SocketAddress。 |
| temporarySelectorIO | 允許指定TemporarySelectorIO實例,以幫助模擬阻塞IO。 |
線程池配置
Grizzly的線程池配置由ThreadPoolConfig對象管理:
| queue | 要使用的任務隊列實現。 |
| queueLimit | 可以排隊的最大待處理任務數。 |
| threadFactory | ThreadFactory 是一個用于創建新的線程的線程池 |
| poolName | 該線程池的名稱。 |
| priority | 分配給每個線程的優先級。這將覆蓋由指定ThreadFactory分配的任何優先級。 |
| corePoolSize | 初始化線程池時需要一起創建的線程的初始數量。 |
| maxPoolSize | 該線程池可以維護的最大線程數 |
| keepAliveTime | 線程可以保持空閑并等待新任務執行后釋放的最長時間??梢允褂米远x時間單位。 |
| 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實現。
總結
以上是生活随笔為你收集整理的Grizzly core configuration的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pajek02:点、线、方向、数值和增删
- 下一篇: WVS简单使用