у меня есть массив элементов 5000, я уверен, выполнение его в ниже способомВыполнение асинхронных процессов один за другим
var arr = [..] // 5000 elements array
split = 10;
arr.split(split);
function asyncForLoop(){
// It takes advantage of Web workers and execute for loop
}
var pending = new Array(split), data = [];
for(var i = 0, l = 4; i++){
(function(a){
data[i] = new asyncForLoop(a, function(){
});
})(arr[i]);
pending.shift();
}
Это путь я выполнения для цикла. 1. Я разбиваю массив на 10 срезов. 2. Создание 4 асинхронных процессов для выполнения первых четырех секторов цикла for. Вот мой вопрос 0: 3. Я хочу реализовать механизм, в котором четыре асинхронных процесса будут выполняться на первых четырех срезах массива, кто бы ни закончил сначала в гонке, выберет 5-й предмет, а следующий выберет 6-й предмет. Это означает, что вы выбираете элемент, который находится в ожидании.
Здесь я столкнулся с проблемой, что если два процесса завершатся в одно и то же время, оба будут выполнять тот же незавершенный элемент, что и состояние, ожидающее в то время.
Не могли бы вы дать мне представление об этом.
Работники Javascript не имеют семафоров. Традиционных разделяемых данных между потоками нет, все связано с сообщениями. – vin
Семафор может быть таким же простым, как переменная ... – iGanja
Но вы можете реализовать семафор на основе сообщений, не так ли? Я мало знаю о веб-работниках, но я предполагаю, что их можно заставить ждать сообщения. – GreatBigBore