You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.2 KiB
42 lines
1.2 KiB
4 years ago
|
'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)
|
||
|
})
|