2012-06-29 4 views
0

Я понимаю, что для задачи, связанной с процессором, для которой обычно требуется 1 поток на ядро, в противном случае вы можете начать добавлять больше потоков на ядро. Но как насчет заданий на строку (или они одни в том же)?Как определить оптимальное количество задач для отправки моей архитектуры?

Я пытаюсь понять, как разбить большую проблему на оптимальное количество Runnable, так что я могу отправить их на Executor. Я понимаю, что вы можете настроить количество потоков, которые будет использоваться Executor (поэтому его необязательно 1 к 1).

Итак, мой вопрос: скажем, я нахожу, что для данного приложения я определяю, что 5 потоков на ядро ​​- оптимальное соотношение; , но как определить оптимальное количество задач (Runnables) для создания в первую очередь?

+0

Связано с http://stackoverflow.com/questions/1489388/platform-independent-way-of-detecting-the-number-of-processors-in-java – Gray

ответ

0

Вы делаете это ручкой, что вы можете изменить, пока вы не будете счастливы. Что может работать на вашей рабочей станции, может не работать для сервера развертывания. Это зависит. Возьмите ручку в одной руке и секундомер в другой, и сравните ее, пока не дойдете до результатов.

-1

Знаете ли вы, что у закона Amdahl ?

С помощью этой формулы можно определить потенциальную вашего ускорения многопоточного приложения получит по сравнению с, как это было бы однопоточные.

Amdahl's Law

Подводя итог вы имеете следующую формулу:

Форсировочная = 1/(1 - р) + (п/п)

где

p - это параллельная доля, 1 - p - это последовательная доля и n - количество процессоров.

Если у вас есть приложение, состоящее из 60% параллельного кода и 40% последовательного кода, у вас будет параллельная доля 0,6 и последовательная одна из 0,4.

Надеется, что это помогает вам

+0

Спасибо Marc, что полезно, но на самом деле не отвечает вопрос. Один использует Закон Амадала, чтобы * помочь * определить, поможет ли многопоточность решить вашу проблему, но мой вопрос предполагает, что вы уже решили многопоточность. Я спрашиваю: * как определить количество «Runnable's» для отправки «Executor' *, что не обязательно совпадает с вопросом о том, сколько потоков на ядро ​​*. Еще раз спасибо за помощь. – IAmYourFaja

+1

Хорошо, я вижу. Спасибо за ваш нежный ответ. –