Как стать автором
Обновить
5
0
Даниил Дубченко @Daniel217D

PHP dev + TeamLead в OnePix

Отправить сообщение

Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров13K

Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза:

Мне когнитивно и морально легче, когда уменьшается «магия» того, с чем работаешь. Может тебе тоже

Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать

Объясню на 4 примерах — каждый лишь немного сложнее предыдущего.

Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье

Пример 2: Запуск скрипта PHP без OPCache и JIT

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

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

Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).

У нас привычный «исходный код» PHP (файл hello-world.php):

<?php echo "Hello world";

Опять идем по порядку, рассмотрим какие процессы происходят запустив команду:

php hello-world.php

Процесс №1 — Компиляция в байт-код
Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор. Первый из двух основных компонентов Zend Virtual Machine.

В отличие от рассмотренного выше компилятора Go:

задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код;

процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go)

В случае PHP этот байт-код назвали PHP OPCode.

Байт-код — является более низко-уровневым, чем исходный код. Он содержит набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую.

Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду:

php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php

Получим:

$_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1)

Вначале видим $_main: — обозначает, что следующие строки относятся к функции main. Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков;

Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации;

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

Процесс №2 — Выполнение байт-кода

Читать далее
Всего голосов 36: ↑35 и ↓1+43
Комментарии12

Как мы построили модель прогнозирования выхода жестких дисков из строя

Время на прочтение11 мин
Количество просмотров6.3K

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

Меня зовут Владислав Маркин, я инженер по разработке ПО искусственного интеллекта в YADRO. Вместе с моим коллегой, экспертом Андреем Соколовым, мы решили применить возможности ИИ в прогнозировании проблем с HDD. Задача не тривиальная: модели нужны данные для обучения и тренировки, а где их найти — отдельный вопрос. 

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

Читать далее
Всего голосов 15: ↑15 и ↓0+22
Комментарии2

Два потока, одно ядро: как устроена одновременная многопоточность

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров26K

Одновременная многопоточность (Simultaneous multithreading, SMT) — это функция, позволяющая процессору одновременно обрабатывать команды из двух разных потоков. Но задавались ли вы когда-нибудь вопросом, как это работает? Как процессор отслеживает два потока и распределяет ресурсы между ними?

В статье я объясню, как устроена эта функция. Понимание внутреннего устройства SMT поможет вам решить, подходит ли она для ваших продакшен-серверов. Иногда SMT способна резко повысить производительность системы, но в некоторых случаях она приводит к замедлению. Знание подробностей позволит вам сделать правильный выбор.

Примечание: основная часть изложенного в статье относится к реализации SMT компании Intel, также называемой гипертредингом (hyper-threading). Она основана на научной статье компании, опубликованной в 2002 году.
Читать дальше →
Всего голосов 50: ↑48 и ↓2+71
Комментарии48

А что если вместо банковского вклада использовать облигации после резкого повышения ставки Банком России?

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров22K

Процентные ставки по вкладам сейчас очень высокие - Банк России публикует информацию о 17,11%, но что если вместо традиционных банковских депозитов использовать облигации для сбережения и получения дополнительного пассивного дохода от этого актива?

Какие у облигаций есть особенности?

📍 Покупать облигации всегда выгоднее, когда ключевая ставка высокая (сейчас 18%). В таких случаях рыночная цена облигаций будет ниже, а доходность к погашению - больше.

📍 При покупке облигаций доходность фиксирует на всё время владения облигациями до их погашения.

📍 Когда Банк России начнет снижать ставку, доходность облигаций начнет падать, а цена - расти, но доходность облигаций, которые уже куплены останется неизменной.

Четыре года назад я написал открытый скрипт, который обращается к API Московской биржи и создаёт выборку по полезным параметрам. Публичных сервисов в интернете по поиску облигаций довольно много, но особенностью моего скрипта стало то, что скрипт выдаёт небольшой список интересных вариантов, которые можно купить прямо сегодня и сейчас. Ведь на Мосбирже торгуется больше двух тысяч облигаций, однако большинство из них не ликвидны, то есть по ним нет или совсем мало предложений о продаже - купить их невозможно.

За эти годы скрипт регулярно менялся. Сейчас представляю его обновленную версию.

Ищём куда пристроить рубли‭💸
Всего голосов 26: ↑21 и ↓5+20
Комментарии161

PHP. Как увеличить потребление памяти в 3 и более раз при работе с массивами

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров19K

1. Общие сведения.
2. Увеличиваем потребление памяти вдвое.
3. Увеличиваем потребление памяти втрое.
4. Ещё раз увеличиваем потребление памяти на ровном месте.
5. Заключение.

Читать далее
Всего голосов 43: ↑43 и ↓0+43
Комментарии56

На кой review это надо?

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров4.9K

Вы проводите код-ревью на текущем проекте или считаете что это просто пустая трата времени?

На собеседованиях я иногда спрашиваю, зачем проводят код-ревью. Вы можете удивиться, но один матерый senior, с 10+ лет в игрострое, и еще пятерку отмотавший в ембедед разработке за наглость получения красного диплома, ответил "потому что все так делают" - это конечно редкий запущенный случай, но было. Еще встречается такое - "потому что так сказал сенсей" (лид, бабушка, ажаль шеф - подставьте свое). Еще какой-то процент людей отвечали, "потому что так делают в гугле", и когда, заметьте не первый человек, на полном серьезе говорит это на собесах я начинаю сомневаться в способностях нашего tech-HR проводить первичное собеседование, а он, надо сказать, иногда еще пишет продуктовый код и эти самые ревью регулярно проходит наравне со всей командой разработки. Не сомневаться же людях, которые пришли?

Поревьювать статью
Всего голосов 15: ↑11 и ↓4+12
Комментарии48

Создание процессора с нуля для чайников

Время на прочтение18 мин
Количество просмотров41K

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

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

В данной статьей мы пройдем путь создания процессора от единичного транзистора до работающего 8-битного процессора, и напишем свой ассемблер для него.

Читать далее
Всего голосов 112: ↑112 и ↓0+138
Комментарии71

Внедряем CI/CD в разработку с помощью Gitlab CI

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.7K

CI/CD помогает разработчикам сократить затраты на развертывание и настройку проектов, позволяя им сконцентрироваться на решении бизнес-задач. Gitlab — чрезвычайно мощная платформа, и мы рекомендуем присмотреться к использованию средств CI/CD, которые она представляет.

В этой статье мы рассмотрели один из самых простых сценариев использования Gitlab CI.

Читать далее
Всего голосов 15: ↑9 и ↓6+10
Комментарии1

Спиральная динамика — как эволюционирует команда

Время на прочтение14 мин
Количество просмотров9.4K

• Как отношения внутри команды влияют на достижение цели?
• Из-за чего сильные сотрудники могут не уживаться в коллективе?
• Как сделать команду привлекательной для новичков?
• Через какие этапы становления проходит команда?
• Какие кризисы связаны с переходом на новый этап?
• Как история IBM и Apple демонстрируют уровни спиральной динамики?

В этой статье я постарался интересно и вдумчиво разобраться в модели эволюционного развития организаций — спиральной динамике.

Читать далее
Всего голосов 30: ↑24 и ↓6+21
Комментарии14

Каноничный TDD

Время на прочтение5 мин
Количество просмотров3.3K

Вик Ву (Vic Wu) удалось схематизировать суть этой статьи.

В этой статье я привожу вредные советы относительно того, как нужно делать TDD. Берите ответственность за качество своей работы на себя так, как вам удобно, если только вы действительно берёте на себя эту ответственность.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+17
Комментарии9

Что о признании ошибок говорит теория игр и когнитивная психология?

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров7.6K

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

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

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

Проявить любопытство
Всего голосов 24: ↑20 и ↓4+19
Комментарии7

Опыт неопытного тимлида

Время на прочтение4 мин
Количество просмотров13K

В этом году я получил очень специфический опыт тимлидерства. Мало того, что это был мой первый опыт тимлидерства, так еще и проекты нужно было стартовать с нуля, и команды были собраны ровно под эти проекты. Никто из нас до этого вместе не работал и не имел четкого представления об опыте, знаниях и возможностях друг-друга.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии24

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность