Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Activeperl на Windows 7 x64


Автор: Валерия 14.12.2011, 18:28
Установила последний Perl 64-разряда на Windows 7
Проблема в том, что когда пытаюсь запустить что-то в более чем 50 потоков, оно работает-работает, а потом по непонятным причинам происходит полный crash.
Цитата

[Window Title]
Perl Command Line Interpreter

[Main Instruction]
Программа "Perl Command Line Interpreter" не работает

[Content]
Возникшая проблема привела к прекращению работы программы. Windows закроет эту программу, а если есть известный способ устранения проблемы, уведомит вас об этом.

[Закрыть программу]

Насколько я помню, когда раньше у меня была Windows 7 то такого не было, возможно из-за того что я использовала более старую (на то время) версию Perl.
А на 2003 вообще всё шло всегда гладко, даже в 300 потоков.

Естественно о х86 версии я вообще молчу - она тянет максимум 80 потоков, потом не хватает адресации (все-таки вы все знаете как криво реализованы потоки в Perl для Windows)

Автор: Pfailed 14.12.2011, 18:43
У вас 50-ти ядерный процессор? Зачем вам столько потоков?  smile 

Автор: Валерия 15.12.2011, 11:32
Цитата(Pfailed @ 14.12.2011,  18:43)
У вас 50-ти ядерный процессор? Зачем вам столько потоков?  smile

Да мне много и не надо, всего-лишь 140.
Сейчас довольствуюсь тем что запускаю два раза приложение по 70 потоков, но это очень неудобно, и нужно данные для обработки делить между ними...
Не правильно это)
Процессор двухядерный.

Автор: Pfailed 15.12.2011, 15:30
А что в потоках происходит? Сетевые операции или рассчётные?
Ни в том ни в другом случае для вашего процессора столько потоков не нужно.

Автор: DurRandir 15.12.2011, 17:40
>криво реализованы потоки в Perl для Windows
"для Windows" здесь лишнее)

>столько потоков не нужно
+1

Автор: Валерия 15.12.2011, 17:55
Операции проходят сетевые.
Очень грубо говоря - авторизация и парсинг огромного сайта.
Скорость при 140 потоках где-то в 1.8 раза больше чем при 70.
У меня два 100mbps интернета работают одновременно (роутер Mikrotik) - поэтому канала для стольки потоков очень хватает smile
Поэтому переживайте на этот счет. Лучше скажите возможные причины вылета Perl.
Причем я заметила что x64 версия вылетает даже на 70 потоках, через некоторое время.
Вернула x86 версию и в данный момент работают два скрипта по 70 потоков в каждом - не вылетает, всё стабильно работает.

Автор: Pfailed 15.12.2011, 18:28
Валерия, такие вещи на потоках уже никто не пишет.
Хотите синтаксической схожести с потоками - используйте Coro.
Вот вам пример
Код

use Coro;
use Coro::LWP;
use LWP::Simple;

my @coros;
for my $url (qw!http://mirror.yandex.ru/centos/6.1/isos/x86_64/CentOS-6.1-x86_64-LiveCD.iso
                http://mirror.yandex.ru/altlinux/5.1/iso/altlinux-5.1-WM-Child-Inst-i586-ru-install-dvd.iso
                http://mirror.yandex.ru/mandriva/official/iso/2011/Mandriva.2011.x86_64.1.iso!) {
    
    push @coros, async {
        my ($fname) = $url =~ m!([^/]+$)!;
        getstore($url, $fname);
    };
}

$_->join for @coros;

С виду полный аналог threads. Достаточно заменить "use Coro" на "use threads".
Но по сравнению с перловыми потоками есть много плюсов, среди которых скорость, значительно меньшее потребление памяти, реальная расшаренность данных. Но есть и свои ньюансы, про которые стоит прочитать. 1. Что такое сопрограммы; 2. Документацию Coro
В винде сборка Coro от activestate какая-то нерабочая. Стоит установить через cpan -i Coro (устанавливается без бубна).

Автор: arto 15.12.2011, 18:33
памяти хватает?

Автор: Валерия 15.12.2011, 18:35
Цитата(Pfailed @  15.12.2011,  18:28 Найти цитируемый пост)
используйте Coro.

Тема не о том, какую альтернативу мне нужно использовать, а о том почему может быть крэш х64 перла на windows 7
Кстати, на windows xp x64 такого креша не происходило.

Добавлено @ 18:36
Цитата(arto @ 15.12.2011,  18:33)
памяти хватает?

Хватает, у меня 8 гигабайт, я даже файл подкачки вообще отключила за ненадобностью. (не думайте что проблема из-за этого, пробывала включать - все-равно crash-ится)

Автор: Pfailed 15.12.2011, 19:05
Цитата(Валерия @  15.12.2011,  18:35 Найти цитируемый пост)
почему может быть крэш х64 перла на windows 7

Из-за бага </thread>  smile 
А что вы хотите сделать после того как узнаете от чего он падает? Альтернатива есть уже сейчас  smile 

Автор: Валерия 15.12.2011, 19:18
Цитата(Pfailed @  15.12.2011,  19:05 Найти цитируемый пост)

А что вы хотите сделать после того как узнаете от чего он падает? Альтернатива есть уже сейчас  

Возможно кто-то знает более старую версию, в которой не было этого бага. 
Я раньше такую юзала, и всё отлично работало, но её не осталось и пока не нашла где скачать.
А для альтернативных вариантов мне почти с нуля весь скрипт переписывать нужно

Автор: Pfailed 15.12.2011, 19:29
Цитата(Валерия @  15.12.2011,  19:18 Найти цитируемый пост)
А для альтернативных вариантов мне почти с нуля весь скрипт переписывать нужно 

Покажите скрипт, думаю вы ошибаетесь.

Автор: alezzz 15.12.2011, 19:47
Pfailed, так все-таки Coro работает под Windows? В списке пакетов ppm от ActiveState его нет.

Автор: Pfailed 15.12.2011, 19:57
alezzz, работает. Я только что установил командой "cpan -i Coro" на perl 5.12 x 86 от ActiveState. Тот что в ppm нерабочий (во всяком случае раньше был), хотя он там есть http://code.activestate.com/ppm/Coro/

Автор: Валерия 15.12.2011, 20:16
Все-таки наверно по хорошему вообще на с++ переходить, а не пытаться реанимировать дохлую лошадь...
Просто все-таки ресурсов перл жрет как не в себя...
Уже qt creator установила, пока балуюсь простыми вещами...

Автор: Pfailed 15.12.2011, 20:26
Может лучше интерпрайз C# или Java, а то опять с этими кривыми opensource поделками (Qt) проблем отхватите  smile 

Автор: Валерия 15.12.2011, 20:32
Цитата(Pfailed @ 15.12.2011,  20:26)
Может лучше интерпрайз C# или Java, а то опять с этими кривыми opensource поделками (Qt) проблем отхватите  smile

Нет! Хочу хоть в раз в жизни получать НОРМАЛЬНЫЕ ехе, которые будут работать на любой Винде, без необходимости ставить джаву или дотнет

Автор: Pfailed 15.12.2011, 20:51
Разумно, правда нужно будет таскать со своей программой пачку dll-ок, навроде QtCore.dll, QtGui.dll и т.п.

Автор: Валерия 15.12.2011, 20:56
Цитата(Pfailed @ 15.12.2011,  20:51)
Разумно, правда нужно будет таскать со своей программой пачку dll-ок, навроде QtCore.dll, QtGui.dll и т.п.

Не страшно)
По идее их в этот ехе можно запихнуть и будет один файлик

Автор: shamber 15.12.2011, 22:06
Валерия, вам говорят плюньте на треды,а вы говорите, что perl дохлый smile Логика сильная

Автор: Валерия 15.12.2011, 22:28
Цитата(shamber @ 15.12.2011,  22:06)
Валерия, вам говорят плюньте на треды,а вы говорите, что perl дохлый smile Логика сильная

Просто я на Perl ради тредов и перешла.
А раз они там дохлые, и нужно еще какие-то дополнения ставить и переписывать скрипт, то уже проще забить и постепенно переходить на другой язык.

Автор: Валерия 17.12.2011, 18:26
Ребята, получилось за 2 дня разобраться с QT, переписала скрипт, многопоточно всё сделала, пашет отлично в 300 потоков)
И работает очень-очень шустро smile

Автор: gcc 18.12.2011, 00:00
ruby буби! smile

Автор: shamber 19.12.2011, 13:06
Валерия, поздравляем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)