Кто не слышал, Тим Брей какое-то время назад решил проверить, как сильно распараллеливаемый Erlang справится с простой задачкой: распарсить Апачевский лог и посчитать в нем количество вхождений каждого URL'а. Это превратилось в долгоиграющую эпопею под названием Wide Finder Project, в которой сейчас участвует куча народу. Одни занимаются тем, что думают, как ускорить Erlang'овую версию, а другие — решением задачки на своих любимых языках.

Известный питонщик Фредрик Лунд сделал свое решение, которое можно демонстрировать как показатель крутости Питона как языка и как платформы. Для затравки скажу, что изначальное наивное решение на Питоне "в лоб" он разогнал в 8 раз, а оригинальный Erlang'овый код оно при этому обгоняет в 600 раз.

Я не хочу пересказывать его статью, но очень советую ее почитать и в нее вникнуть. Для себя же я вынес несколько уроков:

Комментарии: 10 (особо ценных: 1)

  1. Иван Сагалаев

    Особо ценный комментарий

    Хех... Надо было все таки дойти по ссылками из статьи Фредрика! Оказывается, есть модуль — processing —, который очень похож на стандартный threading, но работает на процессах, прозрачно обеспечивая межпроцессную синхронизацию По крайней мере, межпроцессная Queue там есть точно.

  2. Gah

    Кажется, в stackless python было много всякого на тему лёгкой параллеизации, почти что в духе того же эрланга.

  3. Давид Мзареулян

    Да, впечатляет…

  4. Муркт

    Stackless Python не расползается сам на десяток компов.

  5. dp_wiz

    Логи тоже сами не расползаются на десяток компов (=
    А если и расползаются, то со значительными расходами на IO.

    В общем ерланг для распределённой обработки сигналов, а не для CPU-intensive byte crunching.

  6. dobrych

    Да, для всего свои задачи.

    Erlang как язык очень интересен как раз для сетевых приложений. Тот же например ejabberd я считаю пошел правильным путем.

    И не надо запбывать что erricsson как раз связью и занимается, так что они сделали язык под свои задачи и сделали это похоже красиво.

  7. bialix
  8. voldmar

    Осталось дождаться, что кто-нибудь из Google выложит решение под MapReduce.

  9. oqbo

    Что-то мне подсказывает, что оптимизировать Питончик под эту задачу будет не совсем просто. Хотя в принципе сделать можно всё.

  10. Григорий Петухов

    У меня почему-то глючила Queue из модуля processing, когда я туда передавал данные размером больше 100 килобайт. Я забил и вернулся на родные threading и Queue.

Добавить комментарий