| 'use strict' |
| |
| const CHILDREN = 500 |
| , POINTS_PER_CHILD = 1000000 |
| , FARM_OPTIONS = { |
| maxConcurrentWorkers : require('os').cpus().length |
| , maxCallsPerWorker : Infinity |
| , maxConcurrentCallsPerWorker : 1 |
| } |
| |
| let workerFarm = require('../../') |
| , calcDirect = require('./calc') |
| , calcWorker = workerFarm(FARM_OPTIONS, require.resolve('./calc')) |
| |
| , ret |
| , start |
| |
| , tally = function (finish, err, avg) { |
| ret.push(avg) |
| if (ret.length == CHILDREN) { |
| let pi = ret.reduce(function (a, b) { return a + b }) / ret.length |
| , end = +new Date() |
| console.log('π ≈', pi, '\t(' + Math.abs(pi - Math.PI), 'away from actual!)') |
| console.log('took', end - start, 'milliseconds') |
| if (finish) |
| finish() |
| } |
| } |
| |
| , calc = function (method, callback) { |
| ret = [] |
| start = +new Date() |
| for (let i = 0; i < CHILDREN; i++) |
| method(POINTS_PER_CHILD, tally.bind(null, callback)) |
| } |
| |
| console.log('Doing it the slow (single-process) way...') |
| calc(calcDirect, function () { |
| console.log('Doing it the fast (multi-process) way...') |
| calc(calcWorker, process.exit) |
| }) |