marxy: (лось)
[personal profile] marxy
Итак, жила-была у меня задача, нужно сделать тумбы (thumbnail) для большого количества картинок, примерно 500 тысяч.
Плюс-минус.

Была написана мной прога на PHP, за, так сказать 5 минут, сколько и должно занимать написание подобной программы.
Программка ходит рекурсивно по каталогам с картинкам, генерирует тумбы по заданым параметрам и записывает в такой же структуре, как и исходные, большие картинки.

Поскольку в последнее время эта операция применялась особенно часто, для всех 500 тысяч, я решительно подумал вспомнить молодость и переписать код на Си. Так сказать, чтобы получить быструю хорошую программу.

Но не тут то было...

Во-первых, когда я начал писать, вдруг почему-то вспомнил, как в далеких 80-х я программировал даже не на Ассмеблере, напрямую на кода процессоров, 500402 (MOV R2, R4) 800100 (JMP @R0) ну и тому подобное.
Удобство написания на Си после PHP, конечно, полный мрак.

Потея и краснея и матюкаясь, что приходится изъе...ся на самые простейшие операции (например на создание директории, у которой еще нет родительской директории, все эти махинации с распределением памяти и указателями, прочитав кучу мануалов про мазохистское использование некоторых особо логичных функция, вспоминая былые годы написал таки прогу за  час (вместо 5 минут на PHP).
Ну, думаю, время должно себя оправдать.

Обрадовался И вот решил замерять время выполнения обоих программ, сявой и хиповой.
Обе работают по одному и тому же алгоритму, используют одну и ту же библиотеку GD2.
За исключением того, что в тех местах, где PHP логичен, в Си-коде присутствуют определенные, так сказать изъ...бы. Причем в Си я отказался от malloc, просто поставил char[1024].
Это для тех, которые возможно захотят погнусить про buffer overflow.
Не мальчик, знаю. Просто облом стало. Мне это не критично здесь.

Итак что же у нас в сухом остатке...
---------------------------------------------------------------------------
PHP:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
793 root 20 0 225m 14m 9352 R 25 0.2 18:25.36 mk_small.php

real 61m39.128s
user 16m36.510s
sys 1m4.820s

---------------------------------------------------------------------------
C:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32549 root 20 0 41196 4244 3024 R 23 0.1 17:49.83 mk_small

real 57m32.862s
user 17m29.870s
sys 0m47.590s

Прирост производительности - 4 минуты, что составляет меньше 1% (примерно 0.7%).
А с учетом, что задача выполнялась на сервере, где крутились другие задачи, то, принимая во внимание стохастические процесс, можно сказать, что разница вообще не ощутима никак.

Что можно из этого сказать... Я, конечно, понимаю, что основную работу выполняют сторонние библиотеки (GD2, например). Я понимаю, что памяти Си программа занимает в 10-20 раз меньше (в конкретно моем примере я могу существенно сократить память PHP, выгрузив не нужные модели).
НО! Удобство написания, комфортность написания явно не в пользу Си.
И ладно, тут простейшая программа. А если взять программу синтаксического разбора XML с XPATH поисками?

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

Возможно я пишу всем и без того понятный вывод.
Ну, окей, как говорил мой отец, преподаватель с 40 летним стажем:
"Чтобы что-то понять, проще всего попытаться объяснить это кому-то другому" :-))))

Все привет и приятного кодинга.

Неспортивно

Date: 2011-10-26 01:34 pm (UTC)
From: [identity profile] o-sh-y.livejournal.com
С момента "нужно сделать тумбы (thumbnail)" я сразу всё понял. 500k файловых операций на любом языке будут брать кучу времени.

Холивар не выйдет :)

Re: Неспортивно

Date: 2011-10-26 09:49 pm (UTC)
From: [identity profile] marxy.livejournal.com
согласен. холивара не выйдет. больше времени работы уходит на дергание библиотек. и файловых дескрипторов.
у меня тут есть задача по разбору такого же количества хмл.
но опять таки все имхо сведется к дерганью библиотек.
минус Си в том, что это опять будет дергание библиотек, но его (сишное) дерганье обходится весьма дороже и по деву и по устройчивости.
Вопрос. Что остается для Си. Чисто системный вещи по дерганью драйверов. В этом он пока непревзойден.

Кстати, игрался с пресловутым хипхоп, если знаешь.
Прироста нихера не дал. В каких целях Цукерман его юзает не понятно.
Где прирост?

Profile

marxy: (Default)
marxy

November 2011

S M T W T F S
  123 45
678910 1112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 10:22 pm
Powered by Dreamwidth Studios