/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 00:50 |
bog писал: | .
если боевые условия - то даешь среднюю нагрузку на сервак...
10 реквестов в секунду на этот скрипт :))) |
без проблем. на гиге мозгов отработает на раз.
вот 100-1000 - другой разговор.
а вот попробуй как ты fopen-ом посчитать количество строк на 10ти реквестах в секунду
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 01:10 |
гы... давайте бенчмарк устраивать...
задача - подсчет строк в файле
============
ini_set("memory_limit","240M");
$f=0;
$t=microtime();
$s=fopen("1.txt","r");
while(fgets($s))
{
$f++;
}
fclose($s);
echo "$f\nT:".(microtime()-$t);
============
результат
276419
T:0.274203
вариант через файл
============
<?
ini_set("memory_limit","240M");
$t=microtime();
$s=file("1.txt");
echo count($s);
echo "\nT:".(microtime()-$t);
?>
============
276419
T:0.379715
итого фгетс выиграл на 1десятую секунды
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 01:16 |
ну и скрипт абсолютный победитель при условии нелимитированных ресурсов.
========
ini_set("memory_limit","240M");
$f=0;
$t=microtime();
$s=fopen("1.txt","r");
$d=fread($s,200000000);
fclose($s);
$f=substr_count($d,"\n");
echo "$f\nT:".(microtime()-$t);
========
с результатом
276419
T:0.074166
блин, час на эту херню убил, в общем херня ваш file() на больших обьемов полюбому
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 01:27 |
а почему было не поставить ini_set("memory_limit","1M"); ? ;)
я тестировал на 1.5М строк.
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 01:31 |
Alpha_Juno писал: | Я все правильно расписал, file быстрее, fgets медленние. |
файл это по сути две команды, одна читает файл в память, вторая парсит полученное в массив, так что она по определению не может быть быстрее.
а если у кого то файл работает быстрее то либо код неоптимизирован, либо файл кешируется
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 01:34 |
JpS писал: | а почему было не поставить ini_set("memory_limit","1M"); ? ;)
я тестировал на 1.5М строк. |
а потому что 10мб файл через file() даже при 40мб лимите на РНР отваливался из за недостатка памяти. так что я чтоб не мучится сразу 240 поставил.
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 01:37 |
bog писал: | файл это по сути две команды, одна читает файл в память, вторая парсит полученное в массив, так что она по определению не может быть быстрее.
а если у кого то файл работает быстрее то либо код неоптимизирован, либо файл кешируется :) |
да, но к сожалению ты не учел, что в случае вызова file выполняется машинный код, а в случае fopen/fgets - _многократный_ (!) вызов fgets из _интерпретируемого_ языка. внутри file делается тот же самый fgets, только цикл скомпилирован на языке C. в случае с fopen-ом fgets тоже скомпилирован на C, однако возникают накладные расходы на вызов этого самого кода.
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 01:40 |
bog писал: | а потому что 10мб файл через file() даже при 40мб лимите на РНР отваливался из за недостатка памяти. так что я чтоб не мучится сразу 240 поставил. |
а ты попробуй лимитик то вообще убрать ;)
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 01:41 |
JpS писал: | да, но к сожалению ты не учел, что в случае вызова file выполняется машинный код, а в случае fopen/fgets - _многократный_ (!) вызов fgets из _интерпретируемого_ языка. внутри file делается тот же самый fgets, только цикл скомпилирован на языке C. в случае с fopen-ом fgets тоже скомпилирован на C, однако возникают накладные расходы на вызов этого самого кода. |
ну попробуй мой бенчмарк на своей машине запустить и сам увидишь что быстрее работает ;)
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 01:49 |
bog писал: | ну попробуй мой бенчмарк на своей машине запустить и сам увидишь что быстрее работает ;) |
ну во-первых, чуть выше я выкладывал результаты своего бенчмарка, который от твоего оличался лишь синтаксисом оформления, но если тебе будет легче, сделал copy-paste, поправил ошибочки и вот что получилось:
file:
1142483
T:0.184899
fopen/fgets:
1142483
T:0.230885
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 02:24 |
гы, ладно, завтра будет время - еще побалуемся.
надо будет текстовый файл твой взять для проверки еще )
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 02:27 |
ты кстати из шела скрипты запускал ?
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 02:27 |
bog писал: | гы, ладно, завтра будет время - еще побалуемся.
надо будет текстовый файл твой взять для проверки еще :)) |
для "чистоты эксперимента" еще и мою машину :)
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 02:29 |
bog писал: | ты кстати из шела скрипты запускал ? |
из шела
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 02:30 |
JpS писал: | для "чистоты эксперимента" еще и мою машину |
ловлю на слове )))
|
|
|
|
С нами с 27.02.03
Сообщения: 873
Рейтинг: 402
|
Добавлено: 03/11/04 в 09:22 |
Дык bog оно так и должно быть. file может быть быстрее за счет экстенсивных путей ;)
Но платить такую цену в реальности за эту "псевдоскорость" - это конечно надо быть охуенно умным...
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 03/11/04 в 11:06 |
но у меня то вышло что фгетс быстрее работает.
имхо может длина строк в файле тоже както влияет на скорость работы этих команд.
|
|
|
|
С нами с 27.02.03
Сообщения: 873
Рейтинг: 402
|
Добавлено: 03/11/04 в 11:46 |
Я думаю тут дело исключительно в ресурсах.
Если запихнуть весь файл в оперативу сразу и там его и юзать - то file быстрее будет.
А если кусками в память, там с ним трахацца вечно, а еще в своп не дай бог - то file сосет.
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 03/11/04 в 14:12 |
bog писал: | но у меня то вышло что фгетс быстрее работает.
имхо может длина строк в файле тоже както влияет на скорость работы этих команд. |
у тебя файл был меньше, глянь результаты моих тестов, там количество строк выводится.
|
|
|
|