Рабочие задания параллельно на Ubuntu - различия в конкуренции ввода-вывода между Perl и Java

Оказывается, что это было проблемой с mt-daapd вместо с Rythmbox. Я удалил mt-daapd кэш базы данных и перезапущенный сервер, и после восстановления кэша все файлы теперь играет. Я уверен, что установка всего упомянутого программного обеспечения Blender помогла!

3
27.09.2017, 14:07
3 ответа

Различие в производительности наиболее вероятно в как, буферизуя работы между Perl и Java. В этом случае Вы использовали bufferedReader в Java, который дает ему преимущество. Perl действительно буферизует вокруг 4k от диска.

Вы могли попробовать несколько вещей здесь. Нужно использовать функцию чтения в жемчуге для получения больших блоков за один раз. Это может улучшить производительность.

Другая опция могла бы состоять в том, чтобы заняться расследованиями, различный mmap связал модули жемчуга.

2
27.01.2020, 21:46

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

-2
27.01.2020, 21:46
  • 1
    То, что говорит мне, что это - интерпретируемый цикл с условием продолжения по сравнению с соответствовавшим циклом с условием продолжения, которому я верю, выполнится в фоновом режиме. –  Henry McKelvey 02.07.2012, 22:55
  • 2
    Perl компилируют в байт-код, затем работает исходно на процессоре, это на самом деле не интерпретируется. –  bahamat 02.07.2012, 23:34
  • 3
    не работает исходно (это не машинный код, это предназначено, чтобы быть портативным). –  Alexios 02.07.2012, 23:52
  • 4
    Последовательный по сравнению с параллелью не имеет никакого отношения интерпретируемый по сравнению со скомпилированным. –  Gilles 'SO- stop being evil' 03.07.2012, 01:05

Не совсем ответ, но код плохо форматируется в комментариях.

Для GNU Parallel я использую эту версию для копирования. Он может выдавать порядка 1 ГБ/с/ядро и хорошо работает в параллельном режиме :

.
perl -e '$left=-s STDIN;
  while($read=sysread(STDIN,$buf,$left>131072?131072:$left)){
    $left-=$read;
    syswrite(STDOUT,$buf);
  }' < in > out
0
27.01.2020, 21:46

Теги

Похожие вопросы