LINUX.ORG.RU
ФорумTalks

[ПэХаПэ][срачЪ] «Национальный браузер и ОС» - плохо? Маразм? Стоит начать со специалистов!


0

0

http://habrahabr.ru/blogs/php/89298

У меня просто не хватает слов чтобы выразить эмоции.
Прикладные приложения на html с костылями в виде JS, планировщики на пайтоне, ОС на моно... В этот ряд добавилась.. СУБД на.. PHP!

Без комментариев.

P.S.: Тайтл к тому, что «на верхах» бредят, однако стоит прежде разобраться в головах текущих специалистов.



Последнее исправление: tia (всего исправлений: 1)
Ответ на: комментарий от shimon

В том месте, в котором половина добрая функций у ПХП течет, а объекты дорого создавать и дорого уничтожать. Не рассчитывался ПХП на то, что скрипты будут вертеться 24х7.

Т.е. я так понимаю детального списка нехороших мест пыха в студию так и не внесут? Впрочем, я не особо и рассчитывал :)

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

Пусть это будет обычный echo сервер. Принял соединение, что-то прочитал и отправил обратно as is. Нет, конечно, можно и веб-сервер нарисовать на коленке, но IMHO эха будет вполне достаточно.

bibi
()
Ответ на: комментарий от bibi

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

shimon ★★★★★
()
Ответ на: комментарий от bibi

Т.е. я так понимаю детального списка нехороших мест пыха в студию так и не внесут? Впрочем, я не особо и рассчитывал :)

Одно из нехороших мест в пхп — это его GC. Во-первых, насколько я успел понять, на циклических, но изолированных зависимостях он не знает, что делать (классика: объект ссылается на своих «детей», у каждого из которых есть ссылка на родителей).

Вот тебе код, который, по идее, должен сработать при лимите в 64 метра до конца, но не сработает.

<?php

class Thing {
  public $parent = null;
  public $contents = '';
}

class Holder {
  public $children = array();

}

$mem0 = memory_get_usage();
printf("At the beginning, memory: %0.2f KBytes.\n", (float)$mem0 / 1024.0);

$holder0 = new Holder();
for ($i = 0; $i < 1000; $i++) {
  $th = new Thing();
  $th->contents = str_repeat('A', 50000);
  $th->parent = $holder0;
  $holder0->children[] = $th;
}

$memd = memory_get_usage() - $mem0;
printf("Memory usage grew by: %0.2f KBytes.\n", (float)$memd / 1024.0);

// !!! Если GC не ленив, то он сработает сразу за unset
unset($holder0);
$memd = memory_get_usage() - $mem0;
printf("Memory usage grew by: %0.2f KBytes.\n", (float)$memd / 1024.0);

$holder1 = new Holder();
for ($i = 0; $i < 1000; $i++) {
  // По идее, здесь должен сработать самый ленивый GC, потому что у нас 49 метров мертвой памяти.
  // Но он не сработает, и мы получим out of memory. 
  $th = new Thing();
  $th->contents = str_repeat('A', 50000);
  $th->parent = $holder1;
  $holder1->children[] = $th;
}

unset($holder1);
$memd = memory_get_usage() - $mem0;
printf("Memory usage grew by: %0.2f KBytes.\n", (float)$memd / 1024.0);

Если не ссылаться из детей на объект Holder, то память высвобождается сразу по unset() — точнее, при вызове memory_get_usage(), так как в PHP используется ленивый GC. Но это уж очень сильно ограничивает круг задач, которые можно эффективно решать на пхп, и является огромной слабостью его объектной модели.

shimon ★★★★★
()

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

saibogo ★★★★
()
Ответ на: комментарий от bibi

белый человек возьмет хотя бы штатный врапер для libevent

libev же :) и всё равно я бы не сказал что нет никакой разницы между python, perl и php

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.