RasKerGG / SocialNetwork

GNU General Public License v3.0
1 stars 0 forks source link

Урок 4. Асинхронность. Что такое Event Loop. JS SetTimeout 0 #51

Closed Fenz1t closed 1 month ago

Fenz1t commented 1 month ago

Видео синхронность в JavaScript связана с тем, что JavaScript - это однопоточный язык программирования. Это означает, что в один момент времени может выполняться только одна операция. Однако JavaScript предоставляет механизмы для выполнения асинхронных операций, таких как обработка событий, AJAX-запросы, таймеры и т.д.

Event Loop (Событийный цикл)

Event Loop - это механизм, который управляет асинхронностью в JavaScript. Он отвечает за выполнение кода, обработку событий и управление очередью задач.

Основные компоненты Event Loop:

  1. Call Stack (Стек вызовов) - хранит информацию о текущем выполняемом коде и вызываемых функциях.
  2. Task Queue (Очередь задач) - хранит асинхронные задачи, ожидающие своей очереди на выполнение.
  3. Microtask Queue (Микрозадачи) - хранит микрозадачи, такие как Promise.then(), Promise.resolve() и т.д.

Алгоритм работы Event Loop:

  1. Выполняется синхронный код в Call Stack.
  2. Если в Call Stack нет задач, Event Loop проверяет Microtask Queue и выполняет все микрозадачи.
  3. После выполнения микрозадач, Event Loop проверяет Task Queue и выполняет первую задачу в очереди.
  4. Процесс повторяется.
    setTimeout(callback, 0) 

    Когда вы вызываете setTimeout(callback, 0), это не означает, что callback будет вызван немедленно. Вместо этого, callback помещается в Task Queue и будет выполнена после завершения текущего синхронного кода в Call Stack.

Пример:

console.log('Start');

setTimeout(() => {
  console.log('Timeout');
}, 0);

Promise.resolve('Promise')
  .then(data => console.log(data));

console.log('End');

Вывод будет такой:

Start
End
Promise
Timeout