Size: a a a

2020 August 08

SP

Sergey Protko in PHP
например вот тебе задача - тебе надо сходить в 3 апишки и сделать дела когда хотя бы один ответ будет готов и потом когда все
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
> Asynchrony, in computer programming, refers to the occurrence of events independent of the main program flow and ways to deal with such events.
Ну а если у нас ио блокирующее то у нас ведь будет зависимость между появлением событий и потоком выполнения программы.
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
например вот тебе задача - тебе надо сходить в 3 апишки и сделать дела когда хотя бы один ответ будет готов и потом когда все
Ну это можно сделать на тредах с блокирующим ио. Это будет асинхронным программированием?
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Ну это можно сделать на тредах с блокирующим ио. Это будет асинхронным программированием?
да, в целом. у тебя же события по итогу происходят вне зависимости от основного флоу
источник

A

Aleksandr Khristenko in PHP
Просто почему-то в большинстве языков, с которыми я знаком под асинхронностью подразумевается именно реализация с неблокирующим io и обвзякой(промисы, async/await).
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
да, в целом. у тебя же события по итогу происходят вне зависимости от основного флоу
Ты вот когда слышишь асинхронных пхп представляешь в голове amphp или реализацию на pthreads, например?
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
да, в целом. у тебя же события по итогу происходят вне зависимости от основного флоу
Короче видимо опять просто отсутствие единой терминологии =\
источник

AM

Artem Molotov in PHP
Aleksandr Khristenko
Короче видимо опять просто отсутствие единой терминологии =\
Кажется, с этим действительно бяда. В разных источниках крутят по разному.
источник

АГ

Алексей Гевондян... in PHP
pthreads все. rip. parallel - многопоточность, параллелизм. reactPhp, swoole, amp - асинхронность.
источник

SP

Sergey Protko in PHP
const responses = []
const startedAt = Date.now()
let timeOfFirstResponse = null
const done = () => callback({timeOfFirstResponse, responses})
const onResponseUpdate = (response) => {
   responses.push(response)
   if (responses.length === 1) {
      timeOfFirstResponse = Date.now() - startedAt
   }
   if (responses.length === 3) {
       callback({timeOfFirstResponse, responses})
   }
}
request(onResponseUpdate)
request(onResponseUpdate)
request(onResponseUpdate)


vs

const startedAt = Date.now()
const requests = [
   request(),
   request(),
   request()
]

await Promise.any(request)

const timeOfFirstResponse = Date.now() - startedAt

const responses = await Promise.all(requests)

return {
   timeOfFirstResponse,
   responses
}
источник

SP

Sergey Protko in PHP
вот что грубо говоря для восприятия проще
источник

AM

Artem Molotov in PHP
Алексей Гевондян
pthreads все. rip. parallel - многопоточность, параллелизм. reactPhp, swoole, amp - асинхронность.
Я не углублялся, но parallel вроде как корутины собирался работать
источник

A

Aleksandr Khristenko in PHP
Алексей Гевондян
pthreads все. rip. parallel - многопоточность, параллелизм. reactPhp, swoole, amp - асинхронность.
Печально на это смотреть после языков, где есть просто грин-треды без доступа к потокам оси.
источник

AM

Artem Molotov in PHP
(когда планировали)
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Короче видимо опять просто отсутствие единой терминологии =\
скорее контекст обсуждения. С терминами как раз тут все хорошо.

Например мой поинт в концептах с точки зрения общей компутер сайенс. А ты видимо с позиции конкретного рантайма конкретного языка/платформы
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Просто почему-то в большинстве языков, с которыми я знаком под асинхронностью подразумевается именно реализация с неблокирующим io и обвзякой(промисы, async/await).
если твой язык на уровне стандартной библиотеки тебе это через пул тредов делает тебе пофигу?
источник

SP

Sergey Protko in PHP
или представь что хуже - на уровне операционки сисколы заходят в пул "тредов"
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
вот что грубо говоря для восприятия проще
Стало только запутаннее, у тебя там первый пример это не асинхронный?
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Стало только запутаннее, у тебя там первый пример это не асинхронный?
оба асинхронны, если мы про ноду (где у тебя на самом верху в main program flow будет просто запуск и ожидание конца).

Но теперь еще более упоротая мысль. в ноде сейчас зарелизили top level await. И мы технически можем второй пример назвать main program flow. Можем ли мы говорить что теперь это синхронный код?)
источник

AM

Artem Molotov in PHP
Sergey Protko
оба асинхронны, если мы про ноду (где у тебя на самом верху в main program flow будет просто запуск и ожидание конца).

Но теперь еще более упоротая мысль. в ноде сейчас зарелизили top level await. И мы технически можем второй пример назвать main program flow. Можем ли мы говорить что теперь это синхронный код?)
чёт совсем сложно стало
источник