<MyRusakov.ru />

Программирование на Python с Нуля до Гуру

Программирование на Python с Нуля до Гуру

Данный курс научит Вас программировать на языке Python, который крайне желательно знать любому, кто хоть иногда имеет дело с компьютерами. Курс состоит из 6 разделов, в которых Вы с нуля освоите этот язык и сможете создавать самые разные программы для самых разных задач любой сложности.

К курсу прилагается множество упражнений и все исходники из уроков.

Наконец, Вы получите ещё несколько бонусов: "Создание калькулятора на Python", "Создание игры на Python" и "Правильная работа со справочником".

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

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

console.log('первая строка');
console.log('вторая строка');

Но когда строчка кода, стоящая ниже, выполнится раньше верхней строчки, то мы имеем дело с асинхронностью. Код выполняется не последовательно. Самый простой пример асинхронной работы кода - это таймер. Таймер позволяет отложить на какое-то время, выполнение определенного куска кода. И при этом не блокирует работу остального кода, выжидая заданное время задержки. Через заданное время, таймер запустит функцию - произойдет асинхронное выполнение кода.

В браузере есть встроенная функция (метод) - setTimeout(), который первым параметром принимает, какую-ту функцию. Вторым параметром - количество миллисекунд, через которые должна выполниться эта функция.

Как вы думаете, в какой последовательности выполнится этот код?

console.log('1');
console.log('2');
window.setTimeout(function(){
    console.log('3');
}, 2000);
console.log('4(end)');

// 1
// 2
// 4(end)
// 3

Мы видим, что код выполняется последовательно до метода setTimeout(), затем последняя строчка опережает третью. Как это работает? Браузерный интерпретатор доходит до setTimeout(), регистрирует его и помещает в режим ожидания. Далее переходит на следующую строчку, выполняет её и по истечении 2 секунд, возвращается к setTimeout() для выполнения передаваемой функции. Среда исполнения не начнет обрабатывать таймер, пока не будет выполнен основной поток кода. Это правило работает даже в том случае, если срок выполнения таймера уже просрочен.

Для детального понимания работы интерпретатора, давайте копнем немного глубже. Для наглядности, добавим ещё один setTimeout() с задержкой в 1 секунду.

function otherTimeout(){
    console.log('1 секунда');
};

setTimeout(otherTimeout, 1000);

Порядок вывода в консоли будет следующий:

// 1 секунда
// 2 секунды

Вы видите, что первым вывелся нижний таймаут с более короткой задержкой, что логично. Но нам все равно интересно, а что там происходит за кулисами? Как интерпретатор разруливает, что за чем выполняется. Что в JS за эти стоит?

Event Loop

Все обнаруженные setTimeout-ы становятся в очередь. У них регистрируется время задержки. Цикл event loop пробегается по очереди и если видит, что время задержки истекает, то закидывает функцию обратно в стек вызовов и выполняет её. Иными словами, функции будут отрабатывать не по порядковому номеру, а по мере истечения срока задержки.

Метод setTimeout() не является единственным признаком асинхронности. Кроме него есть и другие, например:

  • слушатель событий addEventListener
  • методы работы с сервером

Асинхронность не дает программе притормозить и подождать до истечения окончания времени задержки. В других языках программирования для параллельного выполнения кода, можно создавать многопоточность. JavaScript достаточно эффективно работает в одном потоке, позволяя одновременно выполнять различные операции. По сути, отсутствие поддержки многопоточности в JS, компенсируется моделью событийного цикла - event loop.

JavaScript - это главный язык для фронтэнд разработки, не имеющий конкурентов в своей нише. Однако, для более-менее крупных и средних проектов, никто не пишет на чистом JS, без использования библиотек и фреймворков. Самый лучший способ выучить новую технологию, начать использовать её на практике. Именно поэтому наш видео-курс по React построен на практических занятиях, постепенно переходя от простого к сложному. Присоединяйтесь к нам! Вы ничем не рискуете: Вы либо получите отличный результат, либо назад деньги.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.