Dubbo之线程模型(Dispatcher属性、ThreadPool属性)。
2018-03-08 14:33
295 查看
事件处理线程说明
如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识。则直接在IO线程上处理更快,因为减少了线程池调度。但如果事件处理逻辑较慢,或者需要发起新的IO请求,比如需要查询数据库,则必须派发到线程池,否则IO线程阻塞,将导致不能接收其他请求。
如果用IO线程处理事件,又在事件处理过程中发起新的IO请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。
Dispatcher
all所有消息都派发到线程池,包括请求、响应、连接事件、断开事件、心跳等。
direct
所有消息都不派发到线程池,全部在IO线程上直接执行。
message
只有请求响应消息派发到线程池,其他连接断开事件、心跳等消息,直接在IO线程上执行。
execution
只请求消息派发到线程池,不含响应,响应和其他连接断开事件、心跳等消息,直接在IO线程上执行。
connection
在IO线程上,将连接断开事件放入队列,有序逐个执行,其他消息派发到线程池。
ThreadPool
fixed固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
cached
缓存线程池,空闲一分钟自动删除,需要时重建。
limited
可伸缩线程池,但池中的线程只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)
配置如
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />相关文章推荐
- Dubbo之——线程模型(Linux 用户线程数限制导致的 java.lang.OutOfMemoryError: unable to create new native thread 异常)
- 线程池(thread pool),允许有多个线程同时存在,并发执行,并且这些线程受到统一管理。
- C# multithread,threadpool,ParameterizedThreadStart,传递参数给线程以及回调
- 利用newFixedThreadPool来设计一个线程管理类
- Android输入事件从读取到分发三:InputDispatcherThread线程分发事件的过程
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
- ThreadPoolTaskExecutor线程使用,及线程池配置
- 用CheckForIllegalCrossThreadCalls 属性解决C#线程间操作无效
- 分布式架构学习之:023--Dubbo线程模型
- C# 线程手册 第五章 扩展多线程应用程序 剖析ThreadPool 类
- 详解WPF线程模型和Dispatcher
- [DUBBO] Thread pool is EXHAUSTED! 关于duboo provider并发限流的错误及解决方案
- mingw-w64线程模型:posix vs win32(posix允许使用c++11的std:: thread,但要带一个winpthreads,可能需要额外dll)
- 详解WPF线程模型和Dispatcher
- dubbo的线程模型
- dubbo学习三--集群,线程模型
- c# WaitHandle类在线程池ThreadPool(超过64个线程时)中的使用方法
- ThreadPoolTaskExecutor 多线程分解执行耗时任务与单线程串行执行简单比较
- DUBBO Thread pool is EXHAUSTED!
- C# 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕