javascript-tutorial / ru.javascript.info

Современный учебник JavaScript
https://learn.javascript.ru
Other
3.84k stars 917 forks source link

Исправление ложной информации | перевода в теме Promise API #1936

Open spectrallll opened 8 months ago

spectrallll commented 8 months ago

Описание

  1. В асинхронном рантайме мы имеем один поток один процесс, что исключает любой параллелизм.

  2. Конкурентность - когда несколько задач стартовали и как-то выполняются в течение общего промежутка времени.

  3. Кооперативная многозадачность (модель конкурентного выполнения кода в JavaScript). В асинхронном рантайме мы явно можем сказать какой порядок выполнения кода у нас может быть, благодаря явному переключению потока выполнения с помощью ключевого слова await, что снова собой исключает любой параллелизм.

  4. Термин конкурентное исполнение не говорит о том каким образом эта конкурентность будет получена, например в нашем случае мы переключаем поток выполнения с помощью await.

  5. Если термин "конкурентно" вызывает вопросы или вводит вас в заблуждение, то можно заменить его на "асинхронно", потому что термин "параллельно" в корне неверный и вводит читателей в заблуждение об асинхронной модели JavaScript.

Ссылки

Rob Pike - Concurrency is not Parallelism - https://youtu.be/oV9rvDllKEg?si=DPYT0P5yeFnvgjyq https://en.wikipedia.org/wiki/Concurrency_(computer_science) https://www.baeldung.com/cs/concurrency-vs-parallelism

CLAassistant commented 8 months ago

CLA assistant check
All committers have signed the CLA.

At-Sky commented 8 months ago

Отличное замечание, полностью согласен!

spectrallll commented 8 months ago

Конкурентность - когда несколько задач стартовали и как-то выполняются в течение общего промежутка времени.

Скажите, а как вы представляете выполнение двух или более промисов в течение общего промежутка времени? То есть, к примеру, делается три запроса к стороннему API, и все они, следуя вашему определению, завершатся ровно-ровно за условные 3.5467 секунд? Или же я что-то неправильно понял?

И, в целом, термина «конкурентность», «конкурентное выполнение промисов», в русской литературе по JS не встречал. Возможно, в пример можете привести какую-либо книгу, руководство, документацию с использованием этого термина?

Если термин "конкурентно" вызывает вопросы или вводит вас в заблуждение, то можно заменить его на "асинхронно", потому что термин "параллельно" в корне неверный и вводит читателей в заблуждение об асинхронной модели JavaScript.

То, что промисы работают в асинхронном порядке, — это и так ясно. Какую роль в контексте предложения будет играть асинхронность? Речь совершенно не об этом.

Приветствую, спасибо за ревью. По-первому тейку, это никак не исключает отсутствие параллелизма при асинк рантайме с ивент лупом, это также конкурентное исполнение и ожидаемое поведение, когда при переключении контекста выполнения (await), поток прошелся по ивентлупу и другая сопрограмма (промис), еще не в статусе готово, поэтому поток прыгнет в ту сопрограмму (промис), которая первая будет готова. Второй тейк - не очень понятно, почему нужен источник, привязанный к JavaScript, конкурентное выполнение кода никак не привязано к определенным языкам программирования - это общий термин, если Вы не встречали термин конкуретности относительно JS'а, то где Вы наткнулись на "параллелизм" в JS'е, тем более при рассуждениях об асинк рантайме с ивентлупом?. Третий тейк - меня совершенно удивляет, что Вас правда не смущает "параллелизм" относительно имеющейся модели асинка в джаваскрипт, мы в одном потоке, одном процессе, ивент луп у нас обрабатывается одним потоком, с явным переключением (кооперативная многозадачность), обрабатывается с ОЖИДАЕМЫМ поведением, параллелизм в свою очередь обязательно требует многоядерную среду. Т.к. все факторы исключают наличие любой "параллельности" при таком рантайме - нам обязательно нужно убрать любое упоминание этого термина, иначе это вводит людей в заблуждение.