Что такое мьютекс?

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

Зачем они нам нужны?

Когда мы запускаем вещи параллельно, все становится сложнее. Параллельные задачи иногда пытаются записать в переменную одновременно. Это как если бы два человека использовали одну и ту же клавиатуру, но писали разные вещи. Дело не только в этом. Подробную информацию вы можете найти здесь.

Параллельные задачи в JavaScript

Вам может быть интересно, не работает ли javascript в одном потоке?
Это действительно так, но все же можно делать асинхронные запросы для параллельной работы (с разделением времени). Мы не используем многопоточность, но используем цикл обработки событий JS. Цикл событий JS обрабатывает все наши запросы. Некоторую информацию можно найти здесь.
В своих примерах я буду использовать библиотеки async и async-mutex.

Я предполагаю, что вы уже написали несколько программ с использованием async.parallel. В противном случае вы можете прочитать эту статью о потоках асинхронного управления в JavaScript. Я настоятельно рекомендую вам попробовать async.parallel, потому что он может ускорить ваш процесс примерно в 20 раз (в зависимости от ограничений вашей сети, оборудования и т. Д.). Большинство программ javascript тратят слишком много времени на сетевые операции или операции ввода-вывода, если данные, которые вы собираетесь получить, не зависят друг от друга, но вы хотите убедиться, что все операции выполнены, прежде чем переходить к следующему этапу ваша программа async.parallel - это ответ.

Пример мьютекса

Предположим, вы делаете много запросов асинхронно и хотите регистрировать исключения в файле. Но вы не знаете, когда запрос может создать исключение и записать его в файл. Риск того, что два запроса попытаются записать один и тот же файл одновременно, велик, поэтому мы должны предотвратить это. На помощь приходит мьютекс (в библиотеке fs может быть какой-то механизм мьютекса, чтобы предотвратить то, что я не уверен в этом, но для простоты предположим, что такого механизма нет).

Дальнейшие темы

Если вас интересует параллельное программирование с использованием javascript. Сначала вам необходимо понять некоторые основы работы с операционной системой (основная информация, необходимая для понимания параллельного программирования). Также вам нужно хорошо разбираться в цикле событий javascript. Параллельное программирование - очень актуальная тема, и если вы начнете использовать ее в своих проектах, вы поймете, почему это так важно.

Примечание: я не эксперт ни в одной из этих тем, я просто любопытный ученик, как и вы. В моем последнем проекте мне нужно было ускорить ввод-вывод приложения, и я решил запустить его параллельно. Затем я понял, что мне нужно реализовать какую-то защиту для моих ресурсов (потому что несколько задач пытаются изменить ресурс одновременно). Затем я вспомнил, чему научился на курсе операционных систем в университете. Вот как я узнал об этом, и теперь я делюсь им с вами. В этой статье могут быть неправильные вещи. Если есть, сообщите об этом в ответе, и я исправлю их. Также, если у вас есть вопросы, задавайте их.