zoukankan      html  css  js  c++  java
  • Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name:

    异常引发的问题:

    线程模型

      如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,⽐如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。
      但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,⽐如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。
      如果⽤ IO 线程处理事件,⼜在事件处理过程中发起新的 IO 请求,⽐如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。

     

    因此,需要通过不同的派发策略和不同的线程池配置的组合来应对不同的场景:

    <dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />

    Dispatcher
      all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,⼼跳等。
      direct 所有消息都不派发到线程池,全部在 IO 线程上直接执⾏。
      message 只有请求响应消息派发到线程池,其它连接断开事件,⼼跳等消息,直接在 IO 线程上执⾏。
      execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,⼼跳等消息,直接在 IO 线程上执⾏。
      connection 在 IO 线程上,将连接断开事件放⼊队列,有序逐个执⾏,其它消息派发到线程池。
    ThreadPool (dubbo通过配置threadpool来配置线程池的类型:)
      fixed 固定⼤⼩线程池,启动时建⽴线程,不关闭,⼀直持有。(缺省)
      cached 缓存线程池,空闲⼀分钟⾃动删除,需要时重建。
      limited 可伸缩线程池,但池中的线程数只会增⻓不会收缩。只增⻓不收缩的⽬的是为了避免收缩时突然来了⼤流量引起的性能问题。

    http://www.acgist.com/article/348.html

    http://www.osbaike.net/article-show-id-312932.html

    http://blog.csdn.net/lsm135/article/details/77712130

  • 相关阅读:
    [源码]一个简单的源代码行数统计器
    [转载]一个java程序员的面试
    [源码]用c#创建支持多语言的应用程序
    Effective C#
    [源码]类似于 word 的颜色选择器 ColorPicker
    opera中开启WebGL
    Java学习之路
    邮箱正则表达式写法
    AX 2009 扩展类型控件的Lookup的写法
    唐骏的管理名言
  • 原文地址:https://www.cnblogs.com/kingxiaozi/p/8338474.html
Copyright © 2011-2022 走看看