2013-08-09 3 views
0

у меня есть массив элементов 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-й предмет. Это означает, что вы выбираете элемент, который находится в ожидании.

Здесь я столкнулся с проблемой, что если два процесса завершатся в одно и то же время, оба будут выполнять тот же незавершенный элемент, что и состояние, ожидающее в то время.

Не могли бы вы дать мне представление об этом.

ответ

1

Использование семафора для защиты вашего ожидающего списка. Только один процесс может иметь семафор в любой момент времени, поэтому процесс, содержащий семафор, может безопасно касаться ожидающего списка.

+0

Работники Javascript не имеют семафоров. Традиционных разделяемых данных между потоками нет, все связано с сообщениями. – vin

+0

Семафор может быть таким же простым, как переменная ... – iGanja

+0

Но вы можете реализовать семафор на основе сообщений, не так ли? Я мало знаю о веб-работниках, но я предполагаю, что их можно заставить ждать сообщения. – GreatBigBore

Смежные вопросы