Bash и исполняемый файл Java знают, как обработать материал перенаправления. Вы хотите использовать exec
для замены интерпретатора сценария, выполняющего сценарий оболочки.
#!/bin/bash
exec java -jar ....jar "$@"
Нет простого правила, которое всегда работает. Люди могли бы рекомендовать конкретному числу, потому что они экспериментировали с конкретной компиляцией на конкретной машине, и это было лучшей установкой, или потому что они следовали за некоторым обоснованием, которое может или не может иметь некоторого отношения с действительностью.
Если Вы будете наделены большим количеством RAM, то ограничивающим фактором в долгой компиляции будет процессорное время. Затем одной задачей на ЦП, плюс одна незаконченная задача для тех случайных блоков ввода-вывода, является хорошая установка. Это делает его -j3
для двухъядерного ЦП (или более точно, для машины двойного ЦП — если бы каждое ядро является гиперпоточным, который был бы 4 центральными процессорами, таким образом, -j5
).
Если у Вас есть очень мало RAM, то ограничивающий фактор может быть то, что у Вас не может быть многих параллельных заданий, или иначе они будут продолжать делать друг друга выгрузить. Например, если Вы не можете удобно приспособить два экземпляра компилятора в памяти, make -j2
может уже быть медленнее, чем make
. Так как это зависит от того, сколько процессов компилятора можно поместиться в RAM сразу, нет никакого способа получить общее число.
Промежуточный, может быть выгодно иметь больше заданий. Если каждый процесс компилятора является маленьким, но сборка в целом касается большого количества данных, то диск ввод-вывод может быть числом записей в блоке. В этом случае Вы захотите несколько заданий на ЦП сразу, так, чтобы было всегда одно задание с помощью каждого ЦП, в то время как другие ожидают ввода-вывода. Снова, это очень зависит от задания сборки и от доступной RAM, здесь на том, что доступно для кэша данных (существует оптимум, после которого наличие слишком многих заданий загрязняет кэш слишком много).
Я предполагаю, что это - вид эвристики — разрешение make
запускаться CPUs + 1
процессы должны удостовериться что:
Но, снова, это - руководство эвристического и FreeBSD, все еще рекомендует make -j4
для единственного ЦП.
Обычно существуют причины запустить больше заданий, чем количество ядер. Для C, компилирующего использующий gcc, если - канал не определяется в gcc опциях, он делает свои действия (предварительная обработка, первый показ, оптимизация и блок) в последовательности с помощью временных файлов; - канал изменяет это на использование каналов между подпроцессами. (Добавляющий - канал является значением по умолчанию, например, для FreeBSD, но не является традиционным на Linux.) Так, если Вы имеете 2 ядра и позволяете 2 задания параллельно, они проведут некоторое время в диске ввод-вывод. Рекомендация добавить 1 задание, кажется, связана с этим специфические особенности. Но получить окончательный ответ необходимо найти, кто и при добавлении эта рекомендация и спросите его:) или спрашивают в списке рассылки хинду devel.
В основном то число - то, что авторы называют здравым смыслом. В лучшем случае это - хорошее предположение. Насколько я знаю сделать процесс, который порожден, когда Вы вводите make
уже считается так с -j3
можно закончить с основным ожиданием процесса, в то время как оба другие компилируют.
Однако назад, когда я использовал хинду, эмпирическое правило было <#cpus>*2 + 1
.
Все это зависит от того, что запаздывает Ваша курица, заварка или волшебные 8 шаров говорят Вам о диске ввод-вывод, который должен произойти и планирование Вашего текущего ядра Linux. [начните ядро этого сообщения] С моего личного опыта (-j
не конкретный хинду), все между #cpus + 1 и #cpus *2 +1 урожай, прекрасные результаты [заканчивают ядро этого сообщения] и в среднем Вы едва отметите любые различия. Процессоры и ядра довольно хороши в эти дни.
НО все это изменяется когда: a) Вы на самом деле используете больше чем одно поле для компиляции (du'h) или b) разрабатывают Ваш собственный код
Более высокое -j
атрибут, более вероятно, покажет ранее неизвестные зависимости.
И на ноте стороны: не идите количеством ядер, но количеством параллельных потоков центральные процессоры берут. (Hypertheading!)
-j2
в моей системе. Это вызвано тем, что я пытался появиться обаgcc
иfirefox
с настройками от-j1
до-j5
(поскольку в общей сложности 10 появляются команды), и это кажется этим в то время как-j2
определенно быстрее, чем-j1
, другие три настройки на одном уровне с-j2
. – Francesco Turco 19.10.2012, 15:28