2

我正在对 5 个生产者产生 100,000 条 100k 消息的 jboss 消息安装进行负载测试。我看到了严重的瓶颈。当我监视探查器时,我看到有 15 个名为 WorkerThread# 的线程。这些线程被 100% 分配,无需等待。我认为他们可能是相关的。有谁知道这些线程服务的功能以及是否有线程池设置。我正在使用 supp

JBoss Enterprise Application Server 4.3 CP08
JBoss Enterprise Service Bus 4.4 CP04
JBoss Transactions 4.2.3._CP07
JBoss Messaging 1.4.0.SP3-CP09
JBoss Rules 4.0.7
JBoss jBPM 3.2.9
JBoss Web Services 2.0.1.SP2_CP07

4

2 回答 2

2

我已经想通了。它不是线程池。在为 Jboss Messaging 定义远程连接器的 jboss-messaging.sar/remoting-bisocket.xml 文件中,您会看到几个值,主要是 clientMaxPool、maxPoolSize、numAcceptThreads。

在远程处理中,当建立套接字时,将创建线程来监视该套接字,直到“numAcceptThreads”的值。这个线程所做的只是从套接字读取数据并将其交给客户端池中的一个线程(由 maxPoolSize 管理)。

称为 workerThread#[] 的线程指的是接受线程。当我创建更多生产者时我看到更多的原因是因为对于 Jboss Messaging 的双套接字传输显然创建了三个套接字。最初有 3 个,但是当我创建 5 个生产者时,这个数字增加到 15(或 5 * 3,对于那些没有数学倾向的 :))。它们被 100% 分配的原因是因为当我发送所有这些消息时,线程从套接字读取,移交给服务器线程,返回从套接字读取(这始终是数据)

所以简短的回答是没有管理这些线程的池。你可以有超过 1 个接受线程,但这几乎没有意义。这是因为它的工作是如此之少,读取数据,移交,读取数据......所以拥有更多线程只会增加同步开销。

于 2010-12-07T20:04:05.550 回答
-1

这是来自http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html;希望能帮助到你。

当 Swing 程序需要执行一个长时间运行的任务时,它通常使用其中一个工作线程,也称为后台线程。在工作线程上运行的每个任务都由 javax.swing.SwingWorker 的一个实例表示。SwingWorker 本身是一个抽象类;您必须定义一个子类才能创建 SwingWorker 对象;匿名内部类对于创建非常简单的 SwingWorker 对象通常很有用。

于 2010-12-07T19:09:29.143 回答