问题描述
我的dubbo配置文件的一部分:
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
根据dubbo文档,上面的配置意味着
固定大小的线程池,启动时创建线程,永不关闭。
但是当我启动应用程序然后我使用jstack
查看是否有100多个线程时,我发现只有大约40个线程并且我没有找到任何dubbo线程。
所以发生了什么事?
1楼
您通过声明dubbo:protocol
创建的并不是 JVM 中唯一的线程来源。
通常 JVM 会启动许多实用程序线程,因此它可以正常运行并支持各种功能,例如终结器、关闭钩子、RMI 等。 jstack
显示线程名称,其中大部分您应该能够通过谷歌搜索并了解它们的用途。
您的dubbo
线程池很可能只有在处理传入请求时才会产生新线程。
2楼
这里是dubbo线程模型( ),有图展示dubbo线程模型,可以看到只有server有线程pool,也就是说只有dubbo provider才有线程池,因为它需要把I/O线程和非I/O线程分开。