Сайт Романа ПарпалакаБлог

Оптимизация памяти в PHP и функция serialize

23 декабря 2011 года, 01:43

Хорошая статья на Хабре про особенности выделения памяти в PHP. Обычно на расход памяти в php-скриптах никто не обращает внимания. Но иногда бывают ситуации, когда стандартных 16 мегабайт оказывается недостаточно. Тогда приходится изобретать различные трюки.

Не так давно я писал требовательный к памяти скрипт. Это скрипт поиска, ранняя версия которого используется на сайте правил русского языка, а адаптированная версия перекочевала в мой движок сайтов.

Я немного поколдовал с кодом и в итоге сократил потребление памяти более чем в два раза. Раньше для индексации этого сайта нужно было 32 мегабайта оперативной памяти, а теперь достаточно и 16. Кроме методов из статьи, я применил запись чисел в системе счисления по основанию 36 (перевод осуществляется функцией base_convert()) и оптимизировал функцию serialize(). Опишу последний метод подробнее.

Дело в том, что функция serialize() расходует много памяти, и об этом написано в документации. Если ей передать большой массив, доступная скрипту память может закончиться. Относительно простой выход из положения существует, когда массив нужно сохранить в файл. Функцию serialize() можно применять к отдельным элементам массива, как в следующем фрагменте кода:

file_put_contents($filename, 'a:'.count($array).':{');
$buffer = '';
$length = 0;
foreach ($array as $word => $data)
{
    $chunk = serialize($word).serialize($data);
    $length += strlen($chunk);
    $buffer .= $chunk;
    if ($length > 100000)
    {
        file_put_contents($filename, $buffer, FILE_APPEND);
        $buffer = '';
        $length = 0;
    }
}
file_put_contents($filename, $buffer.'}', FILE_APPEND);

Запись происходит порциями размером около 100 килобайт. Этот код подходит для сохранения в файл массива с большим количеством элементов среднего размера и решает проблему перерасхода памяти функцией serialize().

    1 комментарий

Я дома

18 декабря 2011 года, 00:16

Наконец, добрался домой. В этот раз приключений было не так много. Самолет задержали на семь часов.

С нами, кстати, летел Лебедев. Кажется, он планировал посетить Приднестровье. Я думал, спросить ли мне, не будет ли какой публичной встречи в Кишиневе. Решил не спрашивать. Тёма ведь писал, что лучше, когда его «не узнают». Вроде бы его так никто и не узнал.

Когда я его увидел, сразу возникла конспирологческая гипотеза: самолет задержали из-за Лебедева.

    1 комментарий
Смотрите также:  Снова Домодедово

Снова Домодедово

17 декабря 2011 года, 15:04

Не прошло и года, как я опять застрял в Домодедове. А говорят, что молния не ударяет в одно и то же место дважды.

    Оставить комментарий
Смотрите также:  Я дома

Результаты выборов и задачи на будущее

16 декабря 2011 года, 14:00

Результаты парламентских выборов оказались для меня несколько неожиданными. Я думал, что власть нарисует себе больше 50%. Оказалось, они этого сделать не смогли, несмотря на многочисленные фальсификации.

После оглашения результатов выборов стала понятна главная задача: проигрыш Путина на президентских выборах. Действительно, не нужно отчаиваться от того, что Единая Россия получила больше половины мест в парламенте. Выборы в парламент нужно рассматривать как репетицию президентских выборов. По конституции президент сильнее парламента, и именно проигрыш Путина в марте нанесет режиму непоправимый удар.

Задача эта вполне реальная. Ведь рейтинг Путина падает. Даже если считать, что народ поддерживает Путина больше, чем Единую Россию, его рейтинг может упасть настолько, что и фальсификации не помогут.

Смотрите: по данным опросов ВЦИОМа Единая Россия должна была набрать 41%, а нам объявили 49%. Дальше, уже 10-11 декабря за Путина были готовы проголосовать только 42% опрошенных. Добавьте сюда 8% (разница между сфальсифицированным результатом и завышенным предсказанием ВЦИОМа) и получите 50%.

Получается, что даже без учета трусливой реакции Путина на Болотную площадь второй тур вполне реален. Представляю, что случится с его рейтингом после слов о контрацептивах. А до выборов еще два с половиной месяца!

Что же нужно сделать для решения задачи?

Во-первых, нужно четко понимать, что Путин — лидер партии жуликов и воров. Для осознания масштабов можно прочитать, например, доклад Немцова «Путин. Коррупция».

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

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

    2 комментария

За кого голосовать?

30 ноября 2011 года, 12:38

Из Особого мнения в понедельник:

Л.МЛЕЧИН: Не кажется ли вам поразительным? У нас до выборов осталось меньше недели, а общество продолжает выяснять вопрос «А за кого вы будете голосовать?»?

О.ЖУРАВЛЕВА: Ну как? Это нормально накануне выборов выяснять, за кого мы будем голосовать.

Л.МЛЕЧИН: Нет. Как это? Нет, это полное непонимание существа выборов. Как? У человека есть комплекс взглядов, которых он придерживается, и есть политическая сила, с которой он свой этот комплекс связывает. Это политическая сила, которая его единомышленники и которая реализует его взгляды. А когда меньше чем за неделю до выборов люди все еще задают вопрос, то выясняется, что у людей или нету комплекса взглядов, или (что точнее) отсутствуют эти политические силы, которые могут выражать этот комплекс взглядов.

Так всё же, за кого голосовать? За всех? Или допустить, что «независимость» Миронова и выступления Гудкова не согласованы с Кремлем, и проголосовать за Справедливую Россию?

    1 комментарий

Почему я не люблю курильщиков

29 ноября 2011 года, 16:25

Одноименный пост Ильи Весеннего.

Если я уже знаю человека с хорошей стороны, то тот факт, что он курит, мне почти не мешает. Но любого постороннего курящего человека я почему-то сразу принимаю хуже.

Как будто я сам написал.

    Оставить комментарий

Свобода воли

13 ноября 2011 года, 22:12

Прочитал книжку «Ложная слепота». Среди прочих других интересных идей, в ней высказана одна относительно свободы воли:

Временами электростимуляция мозга вызывает синдром «чужой руки» — непроизвольные движения тела против воли якобы владеющего собой субъекта[29]. В других случаях она провоцирует столь же непроизвольные движения, но при этом субъект настаивает, что производил их сознательно, невзирая на многочисленные эмпирические свидетельства обратного[30]. Сложите это с тем фактом, что тело начинает действовать до того, как мозг «решит» подвинуться[31] — но обратите внимание на [32] и [33] — и само понятие свободы воли — несмотря на явное субъективное ощущение его реальности — начинает выглядеть немного нелепым, …

На всякий случай приведу и ссылки:

29. Porter, R., Lemon, R. Corticospinal function and voluntary movement. NY: Oxford University Press, 1993.
30. Delgado, J. M. R. Physical control of the mind: toward a psychocivilised society. NY: Harper & Row. 1969. (Русское издание: Дельгадо X. Мозг и сознание. М.: Мир, 1971).
31. Libet, В. 1993. The neural time factor in conscious and unconscious events. Experimental and Theoretical Studies of Consciousness 174: 123–146.
32. P. Haggard, P., and Eimer, M. 1999. On the relation between brain potentials and the awareness of voluntary movements. Experimental Brain Research 126: 128–133.
33. Velmans, M. 2003. Preconscious free will. Journal of Consciousness Studies 10: 42–61.

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

А еще на семинарах по философии я спорил со знакомым о том, является ли мозг квантовой системой, или нет. Знакомый утверждал, что в мозге есть особая квантовая часть, выполняющая роль идеальной монетки (например, шумящий контакт между нейронами), которая способна делать выбор из нескольких вариантов, если на ее вход подать вероятности каждого варианта. То есть, когда у человека есть несколько возможных вариантов поведения, совершенно случайным образом будет выбран один из них; нельзя предсказать, какой именно, но можно говорить о вероятностях. В этом по его мнению и есть основа свободы.

Я же утверждал, что мозг — это классическая система (как набор вполне классических нейронов). Если известно его внутреннее состояние, то можно (в принципе) предсказать сигнал на выходе, зная сигналы на входе. В такой модели свобода воли — не более чем иллюзия.

    3 комментария

Один один один…

11 ноября 2011 года, 11:11

11:11:11 11.11.11

    Оставить комментарий

Лекция о реформах начала девяностых

11 ноября 2011 года, 00:51

Сходил на первую лекцию из цикла о реформах начала девяностых. Читал Андрей Нечаев. Ее снимали, возможно, запись будет в интернете.

Было много молодых людей. Многие конспектировали. Их, наверно, экономические вузы специально направили.

В целом интересно. Хоть лекция продлилась вместе с вопросами почти три часа, я не заскучал и не пожалел, что пришел. На следующие тоже, наверно, пойду.

    Оставить комментарий

Дозиметры и мобильники

10 ноября 2011 года, 23:46

На хабре всплыла моя старая идея. Даже вроде как в виде работающего прототипа.

    Оставить комментарий

← сюда туда →

Поделиться
Записи