Jboss Messaging WorkerThread # Что это за темы? - PullRequest
2 голосов
/ 07 декабря 2010

Я нагрузочно тестирую установку обмена сообщениями jboss с 5 производителями, производящими 100 000 сообщений по 100 КБ. Я вижу значительное узкое место. Когда я наблюдаю за профилировщиком, я вижу 15 потоков с именем WorkerThread #. Эти темы распределены на 100% без ожидания. Я думаю, что они могут быть связаны. Кто-нибудь знает, какую функцию эти потоки обслуживают и есть ли настройка пула потоков. Я использую суп

Сервер приложений JBoss Enterprise 4.3 CP08
JBoss Enterprise Service Bus 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

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

Я понял это. Это не пул потоков. В файле jboss-messaging.sar / remoting-bisocket.xml, который определяет соединитель удаленного взаимодействия для Jboss Messaging, вы видите пару значений, в основном clientMaxPool, maxPoolSize, numAcceptThreads.

В удаленном взаимодействии, когда сокет установлен, создаются потоки для мониторинга этого сокета до значения "numAcceptThreads". Все, что делает этот поток, это читает данные из сокета и передает их потоку в пуле клиентов (управляется maxPoolSize).

Потоки с именем workerThread # [] ссылаются на потоки принятия. Причина, по которой я вижу больше, когда создаю больше производителей, заключается в том, что для транспорта bisocket для Jboss Messaging, очевидно, создано три сокета. Изначально их было 3, но когда я создаю 5 производителей, это число увеличивается до 15 (или 5 * 3 для тех, кто не склонен математически :)). Причина, по которой они распределены на 100%, заключается в том, что когда я отправляю все эти сообщения, которые потоки читают из сокета, передают в поток сервера, возвращаются к чтению из сокета (где это всегда данные)

Итак, краткий ответ: нет пула для управления этими потоками. Вы можете иметь более 1 принимающей ветки, но это почти никогда не будет иметь смысла. Это потому, что его работа настолько минимальна - читать данные, передавать их, читать данные ... Так что больше потоков просто добавит накладные расходы на синхронизацию.

0 голосов
/ 07 декабря 2010

Это от http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html; надеюсь, что это поможет.

Когда программе Swing требуется выполнить долгосрочную задачу, она обычно использует один из рабочих потоков, также известный как фоновые потоки,Каждая задача, выполняемая в рабочем потоке, представлена ​​экземпляром javax.swing.SwingWorker.Сам SwingWorker является абстрактным классом;вы должны определить подкласс для создания объекта SwingWorker;анонимные внутренние классы часто полезны для создания очень простых объектов SwingWorker.

...