我正在负载测试5个生产者生产100,000,100k消息的jboss消息传递安装。我看到了严重的瓶颈。当我监视分析器时,我看到有15个名为WorkerThread#的线程。这些线程被100%地分配,没有等待。我想他们可能是有关系的。有没有人知道这些线程服务的功能以及是否有线程池设置。我在用补丁
JBoss企业应用服务器4.3 CP08
JBoss企业服务总线4.4 CP04
JBoss事务4.2.3._CP07
JBoss Messaging 1.4.0.SP3-CP09
JBoss规则4.0.7
JBoss jBPM 3.2.9
JBoss网站服务2.0.1.SP2_CP07
发布于 2010-12-08 04:04:06
我已经弄明白了。它不是一个线程池。在为Jboss消息传递定义远程连接器的jboss-messaging.sar/ remoting -bisocket.xml文件中,您可以看到两个值,主要是clientMaxPool、maxPoolSize、numAcceptThreads。
在远程处理中,当建立套接字时,会创建线程来监视该套接字,直到"numAcceptThreads“的值。这个线程所做的一切就是从套接字读取数据,并将其传递给客户端池(由maxPoolSize管理)中的一个线程。
名为workerThread#[]的线程是指接受线程。当我创建更多的生产者时,我看到更多的原因是因为对于Jboss消息传递的双套接字传输,显然创建了三个套接字。最初有3个,但当我创建5个生产者时,这个数字增加到15(或者对于那些不喜欢数学的人来说是5*3:)。它们被100%分配的原因是,当我发送线程从套接字读取的所有消息时,将其移交给服务器线程,返回到从套接字读取(其中始终是数据)。
因此,简短的答案是没有池来管理这些线程。您可以有一个以上的接受线程,但这几乎没有任何意义。这是因为它的任务非常小,读取数据,传递数据,读取数据……所以拥有更多的线程只会增加同步开销。
发布于 2010-12-08 03:09:29
这是来自http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html的;希望它能有所帮助。
当Swing程序需要执行一个长时间运行的任务时,它通常使用一个工作线程,也称为后台线程。在工作线程上运行的每个任务都由一个javax.swing.SwingWorker实例表示。SwingWorker本身是一个抽象类;您必须定义一个子类才能创建一个SwingWorker对象;匿名内部类对于创建非常简单的SwingWorker对象通常很有用。
https://stackoverflow.com/questions/4371495
复制相似问题