LINUX.ORG.RU

История изменений

Исправление DRVTiny, (текущая версия) :

можно ли на перле написать чтото что будет выдавать 300-800к пакетов в секунду?

Можно, если приложение распараллелено, т.е. состоит из N процессов, где N зависит от того, как генерируются пакеты и от количества ядер CPU.

Проблема скорее в том, что для Perl это N может быть на порядок больше, чем для Crystal или C.

вроде как говорят он хорошо справляется с многопоточностью

Справляется хорошо, но многопоточность ужасная, поскольку таки да, нормальная многопоточность с интерпретируемым языком программирования - слабо совместимы: как без интерпретатора у вас код в потоке будет выполняться? Правильно, никак! Ну так вот в каждый поток копируется весь код интерпретатора, а заодно ещё и все переменные по необходимости копируются, если не объявлены как :shared. Фактически это тот же CoW как для fork'а, только существенно более тормозной.

ИМХО профит в потоках на Perl абсолютно минимален (возможность использования shared-переменных, меньше накладные расходы ядра ОС на хранение/переключение контекста), а геморроя по сравнению с форком - ощутимо больше.

Зато на Perl отлично пишутся асинхронные приложения, так что AnyEvent::FastPing + обычный fork должны помочь отцу русской демократии :)

Исходная версия DRVTiny, :

можно ли на перле написать чтото что будет выдавать 300-800к пакетов в секунду?

Можно, если приложение распараллелено, т.е. состоит из N процессов, где N зависит от того, как генерируются пакеты и от количества ядер CPU.

Проблема скорее в том, что для Perl это N может быть на порядок больше, чем для Crystal или C.

вроде как говорят он хорошо справляется с многопоточностью

Справляется хорошо, но многопоточность ужасная, поскольку таки да, нормальная многопоточность с интерпретируемым языком программирования - слабо совместимы: как без интерпретатора у вас код в потоке будет выполняться? Правильно, никак! Ну так вот в каждый поток копируется весь код интерпретатора, а заодно ещё и все переменные по необходимости копирутся. Фактически это от же CoW как для fork'а, только существенно более тормозной.

ИМХО профит в потоках на Perl абсолютно минимален (возможность использования shared-переменных, меньше накладные расходы ядра ОС на хранение/переключение контекста), а геморроя по сравнению с форком - ощутимо больше.

Зато на Perl отлично пишутся асинхронные приложения, так что AnyEvent::FastPing + обычный fork должны помочь отцу русской демократии :)