powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Производительность Perl
25 сообщений из 26, страница 1 из 2
Производительность Perl
    #38441177
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,

Есть проблема с производительностью perl скрипта.

Один и тот же скрипт с одними и теми же данными запускается на двух серверах - один на виртуалке Windows 2008 r2, второй на Solaris 10. По характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина. Непонятно почему перл скрипт на Windows отрабатывает в два раза быстрее, чем на SUN. Может быть дело в настройках ? Скрипт выполняет обработку текстового файла с помощью регулярных выражений. Как отследить причину низкой производительности скрипта на SUN ?
...
Рейтинг: 0 / 0
Производительность Perl
    #38441217
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может Сан-овская машина загружена другими задачами под самый верх?
Ну и - сам скрипт и данные посмотреть ... бы ....
...
Рейтинг: 0 / 0
Производительность Perl
    #38441273
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovтак может Сан-овская машина загружена другими задачами под самый верх?
Ну и - сам скрипт и данные посмотреть ... бы ....

Процессор загружен на 20%, а память на 30%.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#!/usr/bin/perl

my $before_pattern = '';
my $after_pattern = '';
my $replace = '';
my $count_line = 0;
my $buffer_line_size = 100;
my $new_file_line = '';

while($file_line=<STDIN>)
{
	for($file_line)
	{
		if( $file_line =~ /(\|\[.*\]\|)/g)
		{
			$before_pattern = $`;
			$replace = $&;
			$after_pattern = $';

			$replace =~ s/\[(([2-9]~)|(\d\d+~))(-?\d*(\.\d*)?~0?(\.0*)?)(~\d*)?\]//g;
			$replace =~ s/(~-?\d*)(?:(\.\d*[1-9])|\.)(0*)/\1\2/g;
			$new_file_line = $new_file_line.$before_pattern.$replace.$after_pattern;
		
			if($count_line % $buffer_line_size == 0)
			{
				print STDOUT $new_file_line;
				$new_file_line = '';
				$count_line = 0;	
			}
		}
	}
}


if($count_line > 0)
{
	print STDOUT $new_file_line;
	$new_file_line = '';
	$count_line = 0;	
}
...
Рейтинг: 0 / 0
Производительность Perl
    #38441326
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторо характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина
фигня. какой там проц стоит?
...
Рейтинг: 0 / 0
Производительность Perl
    #38441741
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавторо характеристикам SUN сервер на несколько порядков мощнее чем виртуальная Windows машина
фигня. какой там проц стоит?



1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
и таких много :)

Интел - два ядра всего было на проц.
...
Рейтинг: 0 / 0
Производительность Perl
    #38441744
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
интель частота в 2 раза больше. ну и производительность современных интелей напорядок выше вашего спарка в однопоточных приложениях.

автори таких много :)
скрипто то однопосточный.
...
Рейтинг: 0 / 0
Производительность Perl
    #38441750
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непомню в каком перле, толив 5 толи не в 5 регекспы ускорили сильно. почитайте релизноты.
...
Рейтинг: 0 / 0
Производительность Perl
    #38441764
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавтор1350 MHz 16MB SUNW,UltraSPARC-IV 3.1
интель частота в 2 раза больше. ну и производительность современных интелей напорядок выше вашего спарка в однопоточных приложениях.

автори таких много :)
скрипто то однопосточный.

Но машина виртуальная то была.
Вот думаю, что для винды я скачивал последнюю версию перла, а под сан шла своя родная. Может в этом дело?
...
Рейтинг: 0 / 0
Производительность Perl
    #38441818
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1,

от древнего спарка чудес ждать не стоит
...
Рейтинг: 0 / 0
Производительность Perl
    #38443009
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей ПанфиловTestor1,

от древнего спарка чудес ждать не стоит

На SUN perl - v5.8.4 built for sun4-solaris-64int
На виртуальной винде - 5.14.4 под 64 бит.

Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?
...
Рейтинг: 0 / 0
Производительность Perl
    #38443116
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8
...
Рейтинг: 0 / 0
Производительность Perl
    #38443149
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей ПанфиловTestor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8

То есть лечиться заменой сервера ? :)
...
Рейтинг: 0 / 0
Производительность Perl
    #38443153
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловTestor1Вопрос а на скольк спарк старее чем виртуальный двухядерный процессор ?лет на 8

ВикипедияСерверы с использованием процессоров UltraSPARC IV были выпущены в сентябре 2004
на 9, почти на 10.
...
Рейтинг: 0 / 0
Производительность Perl
    #38448362
TheAthlete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef
...
Рейтинг: 0 / 0
Производительность Perl
    #38448428
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TheAthleteВ первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef

Спасибо за ценное замечание. Вы правы. Этот код не нужен.
...
Рейтинг: 0 / 0
Производительность Perl
    #38449729
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TheAthleteВ первую очередь нужно обновиться до последней версии Perl - в каждой новой версии улучшается производительность, в том числе и регулярок. На сегодня это Perl 5.18.1. Можете поставить с помощью " http://perlbrew.pl/%22%5Dperlbrew]http://perlbrew.pl/"]perlbrew . Именно поэтому на Windows производительность выше.

Плюс вопрос по коду:
зачем вам цикл
Код: ruby
1.
for($file_line) {}


если он делает только одну итерацию и возвращает только ту строку, что выдает while? Если это проверка на undef, то while сам не запускается при достижении undef

Из вашего опыта, можно ли приведенный код еще как-то оптимизировать по скорости?
...
Рейтинг: 0 / 0
Производительность Perl
    #38453077
TheAthlete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понятно, зачем нужен данный код:
Код: ruby
1.
2.
3.
4.
5.
6.
if($count_line % $buffer_line_size == 0)
{
  print STDOUT $new_file_line;
  $new_file_line = '';
  $count_line = 0;	
}


По воводу данного кода:

Код: ruby
1.
2.
3.
$before_pattern = $`;
$replace = $&;
$after_pattern = $';


Почитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"
...
Рейтинг: 0 / 0
Производительность Perl
    #38453814
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheAthleteПочитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"
жаль нет книги "Вредные корпоративные заблуждения : solaris, sparc, freebsd ".
...
Рейтинг: 0 / 0
Производительность Perl
    #38454930
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1Из вашего опыта, можно ли приведенный код еще как-то оптимизировать по скорости?Можно конечно... Переписать на XS (Си).
...
Рейтинг: 0 / 0
Производительность Perl
    #38454932
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.
...
Рейтинг: 0 / 0
Производительность Perl
    #38466111
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TheAthleteне понятно, зачем нужен данный код:
Код: ruby
1.
2.
3.
4.
5.
6.
if($count_line % $buffer_line_size == 0)
{
  print STDOUT $new_file_line;
  $new_file_line = '';
  $count_line = 0;	
}


По воводу данного кода:

Код: ruby
1.
2.
3.
$before_pattern = $`;
$replace = $&;
$after_pattern = $';


Почитайте книгу "Фридл Дж. Регулярные выражения, 3-е издание", глава 7. Perl, раздел "Вредные переменные $`, $&, $'"


Я в цикле объединяю строки по 100 в одну.
В случае, если в последнем цикле строк будет меньше 100, то их нужно будет также вывести.

По поводу временных переменных - на что их заменить в моем случае?
...
Рейтинг: 0 / 0
Производительность Perl
    #38466115
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarstoneМожно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.

Есть реальные идеи что можно еще оптимизировать ?
...
Рейтинг: 0 / 0
Производительность Perl
    #38466387
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1WarstoneМожно еще NYTProf натрвить и увидеть, где узкие места. А нежадные квантификаторы вы и так пользуете.

Есть реальные идеи что можно еще оптимизировать ?
А что нереального в профайлере?
выкиньте старый хлам и поставьте все на свой рабочий ПК - будет ускорение в 3 раза.
...
Рейтинг: 0 / 0
Производительность Perl
    #38467716
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1,

Переписанный пример покажите... Он должен сильно поменяться после правок.

(Читать как: Мне лень самому смотреть что вам уже посоветовали)
...
Рейтинг: 0 / 0
Производительность Perl
    #38468167
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WarstoneTestor1,

Переписанный пример покажите... Он должен сильно поменяться после правок.

(Читать как: Мне лень самому смотреть что вам уже посоветовали)

Последняя версия
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
#!/usr/bin/perl

my $before_pattern = '';
my $after_pattern = '';
my $replace = '';
my $count_line = 0;
my $buffer_line_size = 100;
my $new_file_line = '';

while($file_line=<STDIN>)
{
		if( $file_line =~ /(\|\[.*\]\|)/g)
		{
			$before_pattern = $`;
			$replace = $&;
			$after_pattern = $';

			$replace =~ s/\[(([2-9]~)|(\d\d+~))(-?\d*(\.\d*)?~0?(\.0*)?)(~\d*)?\]//g;
			$replace =~ s/(~-?\d*)(?:(\.\d*[1-9])|\.)(0*)/\1\2/g;
			$new_file_line = $new_file_line.$before_pattern.$replace.$after_pattern;
		
			if($count_line % $buffer_line_size == 0)
			{
				print STDOUT $new_file_line;
				$new_file_line = '';
				$count_line = 0;	
			}
		}
}


if($count_line > 0)
{
	print STDOUT $new_file_line;
	$new_file_line = '';
	$count_line = 0;	
}
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Производительность Perl
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]