美文网首页
netty的线程安全以及eventloop+channel关系

netty的线程安全以及eventloop+channel关系

作者: monk87 | 来源:发表于2019-10-11 08:25 被阅读0次

    netty中channel是线程安全的。因此,我们可以存储一个channel的引用,并且在需要向远端发送数据时,通过这个引用来调用channel相关的方法。即便此时有多个线程都在使用它,也不会出现多线程问题。而且,消息一定会按照顺序发送出去。

    • 一个EventLoopGroup 只会包含一个或多个EventLoop
    • 一个EventLoop在它的整个生命周期中都只会与唯一一个Thread绑定,下面是它的父类中的对象
    /**
     * Abstract base class for {@link OrderedEventExecutor}'s that execute all its submitted tasks in a single thread.
     *
     */
    public abstract class SingleThreadEventExecutor extends AbstractScheduledEventExecutor implements OrderedEventExecutor {
    
        static final int DEFAULT_MAX_PENDING_EXECUTOR_TASKS = Math.max(16,
      //省略不相关代码
        private final Queue<Runnable> taskQueue;
    
        private volatile Thread thread;
    
    
    • 所有由eventloop所处理的各种io事件都在它所关联的thread上执行
    • 一个 Channel在他的生命周期中只会注册在一个eventloop上
    • 一个EventLoop在运行过程中,会被分配给多个Channel

    相关文章

      网友评论

          本文标题:netty的线程安全以及eventloop+channel关系

          本文链接:https://www.haomeiwen.com/subject/ptnzpctx.html