Я работаю над реализацией довольно сложной системы в JavaScript, которая должна имитировать, помимо прочего, многопоточные процессы. В реальном многопоточном процессе (таком как поток ядра) можно переключаться между потоками посредством контекстного переключения. Это работает, потому что вы можете хранить счетчик программ текущего процесса и регистрироваться во временную структуру, восстанавливать счетчик программ и регистрировать какой-либо другой процесс, а затем возобновлять работу, в которой вы остановились в предыдущем процессе.Имитация контекстных переключателей в JavaScript?
Мне любопытно, есть ли в JavaScript что-то похожее на это. В настоящее время я не знаю, как это сделать, и поэтому мы разрабатываем систему с использованием совместной многозадачности. В частности, любая «функция», которую я хочу запустить в многопоточном симуляторе, разделяется на массив функций. Чтобы выполнить «функцию», я перебираю массив функций, выполняя каждый по порядку, сохраняя при этом «счетчик программ», из которого следует выполнить следующую функцию. Это позволяет мне моделировать контекстный переключатель, вызывая одну из функций в массиве, ожидая возвращения функции, а затем переключаясь на другой массив функций, которые необходимо выполнить.
Мой текущий подход работает, но в этой системе сложно писать код. Каждая функция должна указывать конкретно, когда ее можно прервать, и поскольку функции в массиве все раздельны, логика для передачи данных между различными частями функции сложна. Я надеялся получить что-то ближе к превентивной многозадачности, работающей вместо этого.
Мой вопрос: Можно ли запустить произвольную функцию JavaScript так, чтобы ее можно было приостановить и возобновить внешним источником?
Обязательное упоминание о [Веб-работниках] (https://developer.mozilla.org/En/Using_web_workers), когда кто-то использует JavaScript и многопоточность в том же предложении. –