parallel.es
Version:
Simple parallelization for EcmaScript
39 lines (38 loc) • 1.98 kB
JavaScript
var arrays_1 = require("../../util/arrays");
var serialized_function_call_1 = require("../../function/serialized-function-call");
function createTaskEnvironment(definition, functionCallDeserializer) {
var userDefinedEnvironment = {};
if (definition.environment) {
if (serialized_function_call_1.isSerializedFunctionCall(definition.environment)) {
var environmentProvider = functionCallDeserializer.deserializeFunctionCall(definition.environment);
userDefinedEnvironment = environmentProvider();
}
else {
userDefinedEnvironment = definition.environment;
}
}
return Object.assign({}, { taskIndex: definition.taskIndex, valuesPerTask: definition.valuesPerTask }, userDefinedEnvironment);
}
/**
* Main coordination function for any operation performed using {@link IParallel}.
* @param definition the definition of the operation to performed
* @param options options passed from the thread pool
* @param T type of the elements created by the generator
* @param TResult type of the resulting elements
* @returns the result of the operation from this worker
*/
function parallelJobExecutor(definition, _a) {
var functionCallDeserializer = _a.functionCallDeserializer;
var environment = createTaskEnvironment(definition, functionCallDeserializer);
var generatorFunction = functionCallDeserializer.deserializeFunctionCall(definition.generator, true);
var iterator = generatorFunction(environment);
for (var _i = 0, _b = definition.operations; _i < _b.length; _i++) {
var operation = _b[_i];
var iteratorFunction = functionCallDeserializer.deserializeFunctionCall(operation.iterator);
var iteratee = functionCallDeserializer.deserializeFunctionCall(operation.iteratee);
iterator = iteratorFunction(iterator, iteratee, environment);
}
return arrays_1.toArray(iterator);
}
exports.parallelJobExecutor = parallelJobExecutor;
;