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

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

Ответы
Аватар пользователя Aleksey
Aleksey
05 апреля 2023

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

1 0
Аватар пользователя 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 секунды.

11 0
Добавьте ваш ответ

Рекомендуемые курсы

курс
15 часов
Старт в любое время
курс
11 часов
Старт в любое время
курс
18 часов
Старт в любое время