Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Тест стоимости вызовов в php7.3-fpm / 5 сообщений из 5, страница 1 из 1
12.10.2020, 18:52
    #40007815
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест стоимости вызовов в php7.3-fpm
Провел тестирование стоимости вызовов функций на PHP7.3-fpm, итого результаты теста:

avg time: clear=26,16 ns, func=69,83 ns, stat=83,53 ns, method=90,29 ns.
static/func=31,4%
method/func=46,9%

Железо: Pentium Core2duo E2200, выключено все по максимуму, кроме браузера с 1 вкладкой :)

Тест - простая функция ( return $i+10; ) возвращающая параметр + константа, результат которой присваивается в переменную в цикле из 100_000 повторов. Функция реализована трижды: как глобал, как статическая функция класса и как метод объекта.
4 цикла (один "пустой", без вызова но с вычислением) завернуты в 100 повторов для вычисления средних значений.

Сам тест:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
<?php
// Проверка скорости исполнения вызовов статических, методов и простых функций для php7.3-fpm:

/** simple function */
function someTest(int $i): int
{
    return $i+10;
}

class Some {
    public static function statTest(int $i): int
    {
        return $i+10;
    }

    public function dynTest(int $i): int
    {
        return $i+10;
    }
}

$objSome = new Some();
$i = 0;
$res = 0;
$num = 100;
$repeat = 1000*1000;
$sum = [];

ob_start();
do {
    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = $i+10;
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['clear'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = someTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['function'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = Some::statTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['static'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = $objSome->dynTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['method'][] = $start;
} while( --$num > 0 );
ob_clean();

$num = 100;
$clear = $func = $stat = $dyn = 0.0;
for($i=0; $i<$num; $i++){
    $clear += $sum['clear'][$i];
    $func  += $sum['function'][$i];
    $stat  += $sum['static'][$i];
    $dyn   += $sum['method'][$i];
}
// calc average time for 1 in nano seconds:
$multiplier = 1000*1000/$num/$repeat;
$clear = round($clear*$multiplier, 2);
$func  = round($func*$multiplier, 2);
$stat  = round($stat*$multiplier, 2);
$dyn   = round($dyn*$multiplier, 2);

echo "\n<br><br>avg time: clear={$clear} ns, func={$func} ns, stat={$stat} ns, method={$dyn} ns."
  , "\n<br>static/func=", round(($stat-$clear)/($func-$clear)*100 - 100, 1), '%'
  , "\n<br>method/func=", round(($dyn-$clear)/($func-$clear)*100 - 100, 1), '%'
;



К вопросу, может ли хоть какой-то "фреймворк" (Zend, Yii, Laravel, Symphony, etc.) работать в HiLoad с ихними 60+ вложениями вызовов, DI, хелперами, сервисами и прочей ерундой. :)


Историки часто находят артефакты древней высокоразвитой Цивилизации со странными буквами - СССР
...
Рейтинг: 0 / 0
12.10.2020, 19:22
    #40007823
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест стоимости вызовов в php7.3-fpm
...
Рейтинг: 0 / 0
12.10.2020, 19:31
    #40007826
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест стоимости вызовов в php7.3-fpm
ScareCrow,

И? Это тут к чему?

Что там с чем сравнивается: 717 реквестов на поток .. это же просто жуткие тормоза .. и, на каком железе?
2 метра на "Привет Мир" и 200+ классов, то что может выдать "школьник на HTML" .. крутой тест. :)

В общем, вопрос не рассмотрен как положено, тема не раскрыта. ;)
...
Рейтинг: 0 / 0
12.10.2020, 19:42
    #40007828
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест стоимости вызовов в php7.3-fpm
avg time: clear=26,25 ns, func=54,34 ns, stat=67,98 ns, method=75,69 ns.
static/func=48,6%
method/func=76%

Удалены описания параметров и возвращаемых значений .. расход "велик" однако.
...
Рейтинг: 0 / 0
13.10.2020, 06:35
    #40007928
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тест стоимости вызовов в php7.3-fpm
ScareCrow,

Тогда уж надо было приводить что-то такое: https://wpgutenberg.top/polnoe-sravnenie-proizvoditelnosti-php-5-6-7-0-7-1-7-2-7-3-i-7-4-2020/

400 реквестов в секунду на .. 30-процессрном Xeon со 128 гектарами оперативы и SSD дисками .. это Hiload, точно? Хаха.. :)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Тест стоимости вызовов в php7.3-fpm / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]