Комментарии 11
Что именно означает однопоточный, если я верно помню чтобы запустить второй поток в других яп и работать с ним все равно нужно применять костыли в виде блокировок.
В js тоже можно запустить другие потоки прямо из контекста этого, значит что не такой уж он однопоточный выходит, и по сути разница только в том насколько сложно работать с другими потоками придется программисту.
В js тоже можно запустить другие потоки прямо из контекста этого, значит что не такой уж он однопоточный выходит, и по сути разница только в том насколько сложно работать с другими потоками придется программисту.
-1
Нет, не обязательно блокировки использовать. Можно работать с разными наборами данных. Есть атомарные операции.
0
То есть бывает такое что переменная непосредственно доступна в разных потоках? это вроде как на уровне операционной системы нереально и придумывают, что то типа редиса тока внутри программы.
0
В JavaScript нет потоков (если не рассматривать последний Node.js). Весь код, хоть он и асинхронный, обрабатывается в одном потоке (см. Event loop). То есть в один момент времени выполняется только одна инструкция, хотя может казаться что они выполняются параллельно. В других ЯП, в которых реализована нормальная многопоточность, в один момент времени могут выполняться сразу несколько инструкций (в разных потоках). И как раз для организации доступа к разделяемой памяти между потоками и применяются блокировки.
Например, если нужно сделать некоторые математические расчеты в несколько потоков, то на JavaScript они будут выполняться, в действительности, последовательно, а на Java, например, будут выполняться параллельно (если правильно реализовать).
Например, если нужно сделать некоторые математические расчеты в несколько потоков, то на JavaScript они будут выполняться, в действительности, последовательно, а на Java, например, будут выполняться параллельно (если правильно реализовать).
+2
Стоит упомянуть, что всё-таки есть способ запустить код в настоящем отдельном потоке в браузере — Web Workers. Да, с ограничениями и сложностями с обменом данными, но тем не менее часть тяжелых вычислений можно туда перенести, разгрузив код отрисовки интерфейса, уменьшив лаги.
+3
Это верно. Но для тех, кто работал с обычними небезопасными потоками яваскриптовые воркеры выглядят точно так же, как запуск дочернего процесса и далее беседа с ним через сокет / пайп.
Взять и пошерить память нельзя до сих пор даже в wasm, хотя казалось бы, почему нет. Видимо, спека даёт какие-то атомарные гарантии, как ява :(
0
Опечатки:
- И так, → Итак,
- Когда встречается вызов функции first() он так же… → Когда встречается вызов функции first(), он также...
- понятие окружения в котором код→ понятие окружения, в котором код
- Таким образом все задачи из очереди → Таким образом, все задачи из очереди
- И так, мы изучил как работает асинхронный JavaScript и другие понятия, такие как стек вызовов, цикл обработки событий, очередь сообщений/очередь задач и очередь микротасков, которые вместе представляют собой среду выполнения JavaScript. → Итак, мы изучили, как работает асинхронный JavaScript и понятия: стека вызовов, цикла обработки событий, очереди сообщений/очереди задач и очереди микротасков, которые составляют среду выполнения JavaScript.
- очередь микростасков → очередь микротасков
- Как вы можете видеть “промис” выполнился раньше → Как вы можете видеть, “промис” выполнился раньше
- считает задачи из очереди микротасков важнее, чем задачи из очереди сообщений/очереди задач → считает задачи из очереди микротасков важнее задач из очереди сообщений/очереди задач ИЛИ считает задачи из очереди микротасков более важными, чем задачи из очереди сообщений/очереди задач
0
Спасибо за перевод понятной и ёмкой статьи!
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разбираемся с асинхронностью в JavaScript [Перевод статьи Sukhjinder Arora]