Re: Catalyst: увеличиваем скорость реакции

Sergeev Serge simne at yandex.ru
Mon Sep 13 14:18:52 PDT 2010


13.09.10, 23:40, "Alexandr Ciornii" <alexchorny at gmail.com>:
> 13 сентября 2010 г. 22:30 пользователь Ivan Иван  написал:
>  
>  >>  Как я написал раньше, fork - это не копирование. Память помечается как
>  >>  используемая несколькими процессами. fork был специально так
>  >>  оптимизирован. В частности, system() работает через fork().
>  >>
>  >
>  > Тут вот, можно поподробнее. Я думал всегда, что идёт всё же копирование скопа. И, для threads, в отличии от классического fork можно указать совместно используемые переменные (= память). Если форк тупо помечает память, то при изменении переменных, это бы видели остальные чилды. Что как бэ не так. Значит ссылки на переменные - откопированны, а не просто помеченны.
>  
>  Страница памяти (не вся память занятая процессом, а какой-то небольшой
>  кусок) копируется только при модификации. Поэтому и называется COW -
>  copy-on-write. Техника широко применяется не только в Unix fork() но и
>  в самом Perl невидимо для пользователя.
>  
>  http://en.wikipedia.org/wiki/Copy-on-write

Думаю что вы путаете.
То есть да, сам интерпретатор Перл конечно разделяется между несколькими процессами - потому что это тот случай, когда система может однозначно определить что эти данные неизменяемые - в исполняемых файлах форматов exe и elf действительно есть пометки, указывающие что данный код неизменяемый.

Но сами данные не могут разделяться без специальной поддержки при написании интерпретатора, потому что например у каждого процесса интерпретатора Перл они генерятся с нуля и могут "в зависимости от погоды в Африке" каждый раз построить разное дерево.
Кстати, по этой-же причине, не было ни одной достаточно успешной попытки сделать JIT компилятор и даже использовать принцип COW для создания двоичных версий библиотек, для ускорения Perl5 - просто в системе не была изначально предусмотрена возможность COW, и очень тяжело это внедрить в уже существующую большую программу.



More information about the Kiev-pm mailing list