Почему «синхронный» значит «идущий один за другим» в контексте программирования ?

Почему в контексте программирования «синхронный» — это «идущий один за другим» ? Само слово «синхронный» приводит к некому замешательству, ведь обычно оно значит «одновременно».

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
06 июня 2022

Путаница с именованием действительно есть, так как понятия синхронный и асинхронный в программировании означают не совсем то же, что в обычной жизни. Синхронный в программировании — это значит, что код выполняется синхронно с основным потоком программы. Например:

const syncFunc = () => 1 + 1;

const main = () => {
  const result = syncFunc();
  console.log(result);
};

main();

В примере выше функция syncFunc — это синхронная, то есть обычная функция. Функция main() представляет собой основную функцию программы, в ней вызывается функция syncFunc(). Благодаря тому, что функция syncFunc синхронная, то работа функции main будет длиться не меньше, чем работа функции syncFunc. Если функция syncFunc будет выполняться 3 секунды, то и main будет выполняться не меньше 3 секунд, что логично, ведь внутри main код ждет, пока выполнится syncFunc. Если выполнение syncFunc увеличится, например, на 2 секунды, то и работа main увеличится на 2 секунды. То есть время работы функций syncFunc и main синхронно.

Теперь пример с асинхронной функцией:

const asyncFunc = () => {
  fs.readFile('./myfile', 'utf-8', (_error, data) => console.log('First!'));
};

const main = () => {
  asyncFunc();
  console.log('End!');
};

main();

Теперь main вызывает асинхронную функцию asyncFunc и не дожидается выполнения этой функции, сразу печатается "End!". То есть время работы asyncFunc никак не влияет на время работы main. Если asyncFunc увеличится на 3 секунды, то время выполнения main не увеличится на 3 секунды.

34 0
Аватар пользователя Aleksey
Aleksey
05 апреля 2023

Можно сказать, что код будет выполнятся синхронно по мере его чтения движком, обработки. Еще, особенность синхронного кода заключается в том, что выполнение программы останавливается, пока блок кода не завершится. Это означает, что если у вас есть долгий цикл, который выполняется в основном потоке, то весь интерфейс программы будет заблокирован до тех пор, пока цикл не завершится. И наоборот, асинхронный код будет выполнен программой через какой-то промежуток времени после его обработки.

8 2

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

Тест-драйв

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.