EventLoop Blocking Prevention¶
EventLoop Blocking Prevention refers to the set of practices and architectural decisions in [[Netty]] designed to prevent time-consuming tasks from stalling the I/O operations of the event loop thread.^[600-developer__big-data__netty__netty-01.md]
Because the EventLoop is responsible for both I/O processing (such as reading from and writing to channels) and the execution of tasks submitted to it, blocking operations can cause the thread to hang, leading to a halt in all I/O activity for that channel or group of channels.^[600-developer__big-data__netty__netty-01.md]
Key Principle¶
The cardinal rule of Netty concurrency is: Do not place time-consuming tasks in the EventLoop.^[600-developer__big-data__netty__netty-01.md]
Executing blocking or long-running logic directly within the EventLoop thread will cause the I/O to block ("卡住"), preventing the server from processing new requests or handling network traffic promptly.^[600-developer__big-data__netty__netty-01.md]
Implementation Strategies¶
To handle business logic or heavy computations without blocking the EventLoop, developers should utilize a separate business thread pool.^[600-developer__big-data__netty__netty-01.md] The source material identifies two primary methods for integrating a thread pool into the channel pipeline:
- Custom Thread Pool in Callback: Define a custom thread pool within the callback methods of a
ChannelHandlerto execute the blocking task asynchronously.^[600-developer__big-data__netty__netty-01.md] - Pipeline Addition: Add a specific handler to the
ChannelPipelinethat manages the thread pool execution.- Syntax:
pipeline.addLast("thread_pool_name", new XxxHandler());^[600-developer__big-data__netty__netty-01.md]
- Syntax:
Related Concepts¶
- [[EventLoop]]
- ChannelPipeline
- [[Thread Safety]]
Sources¶
600-developer__big-data__netty__netty-01.md