Skip to content

Latest commit

 

History

History
25 lines (14 loc) · 4.75 KB

async.md

File metadata and controls

25 lines (14 loc) · 4.75 KB

Оглавление

Параллелизм и асинхронность

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

* Асинхронность
* Параллелизм
* Асинхронность в PHP

Асинхронность

Асинхронный код требует обработки зависимостей, возникающих при выполнении задач, и это реализуется с помощью колбэков. Когда какая-то задача выполнена, код уведомляет об этом другую задачу. Асинхронный код в основном — это про время выполнения задачи (порядок событий).

Параллелизм

Чтобы понять разницу между асинхронным и параллельным выполнением на реальном примере, сравним два популярных веб-сервера: Apache и Nginx. Nginx использует асинхронную модель на основе событий в то время как Apache задействует параллельные потоки. Apache создает новые потоки для каждого дополнительного соединения, поэтому здесь максимальное число допустимых соединений зависит от объема доступной памяти в системе. Когда предел подключений достигнут, Apache перестает создавать дополнительные подключения. Если поток останавливается, клиент ожидает ответа, пока поток не освободится и не сможет отправить ответ.

Nginx работает не так, как Apache, — он не создает новых потоков для каждого входящего запроса. У Nginx есть основной рабочий процесс, который является однопоточным. Этот воркер может обрабатывать тысячи соединений «одновременно» и делает это асинхронно, одним потоком, а не параллельно в несколько потоков.

Таким образом, «асинхронность» — это то, каким образом мы выстраиваем систему, это композиция не зависящих друг от друга процессов. Под «параллельным выполнением» понимают выполнение нескольких процессов в один и тот же момент времени, при этом они могут быть связаны или не связаны между собой. При асинхронном выполнении мы обрабатываем несколько задач сразу, а при параллельном выполнении — запускаем несколько процессов сразу. Может показаться, что это одно и то же, но это не так. Асинхронность описывает структуру, параллельность — способ выполнения.

Асинхронность в PHP

В PHP нет инструментов для написания по-настоящему асинхронного кода. Не существует эквивалента setTimeout (), и мы не можем просто отложить или поставить в очередь выполнение какого-либо кода. Вот почему стали появляться такие фреймворки и библиотеки, как Amp и ReactPHP. Их идея заключается в том, чтобы скрыть низкоуровневые детали языка и дать пользователю инструменты высокого уровня, которые позволяют писать асинхронный код и управлять конкурентным выполнением процессов, как JavaScript и Node.js.