Другой альтернативой является запуск вашего скрипта с #!/bin/bash -f
в качестве первой строки, что позволит вам принимать буквенные строки в качестве аргументов (включая звездочку), и, таким образом, позволит вам запустить ./a.out 123 *
с нужным вводом , но учтите, что bash -f
полностью отключает расширения, и это может иметь неблагоприятные последствия в вашем скрипте в зависимости от того, что вы делаете.
Да, однопоточные программы Java, использующие синхронизацию могут быть немного медленнее, чем без синхронизации. Для ранних выпусков Java синхронизация была дорогой. Однако для любого современного выпуска неконтролируемая синхронизация обходится довольно дешево. Я бы не стал беспокоиться об этом.
Обратите внимание, что в Java 6 есть, а в Java 7 должна быть хорошая оптимизация блокировки:
Для получения дополнительной информации см. Технический документ о производительности Java SE 6 . Также обратите внимание, что неконтролируемая синхронизация оказывается более дорогостоящей на многоядерных процессорах, чем на одноядерных процессорах, возможно, из-за требований модели памяти Java к синхронизации, вынуждающей кеши локального процессора совместно использоваться с другими процессорами, или из-за некоторого другого барьера памяти. Например, прочтите Действительно ли оптимизация потоков Java 6 работает? - Часть II . (Часть I не была такой проницательной, как Часть II.)
При использовании синхронизированных структур данных замедление не зависит от того, «сколько» блокируется. Активация или снятие блокировки выполняется медленно, поскольку обычно включает в себя что-то вроде системного вызова (переключение контекста происходит медленно на любой платформе). В среде JIT, такой как типичная JVM, теоретически можно было бы оптимизировать все вызовы блокировки / разблокировки, когда работает только один поток, но он должен быть должным образом недействительным при запуске другого потока.
Обратите внимание, что такие вещи, как фьютексы Linux, не должны выполнять системные вызовы, если нет разногласий, но их использование по-прежнему медленнее, чем бездействие.
Да. Они будут немного медленнее из-за дополнительных накладных расходов на поддержку блокировок.