mirror of
https://github.com/idanoo/GoScrobble
synced 2025-07-01 21:52:19 +00:00
0.2.0 - Mid migration
This commit is contained in:
parent
139e6a915e
commit
7e38fdbd7d
42393 changed files with 5358157 additions and 62 deletions
22
web/node_modules/worker-farm/examples/pi/calc.js
generated
vendored
Normal file
22
web/node_modules/worker-farm/examples/pi/calc.js
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
'use strict'
|
||||
|
||||
/* A simple π estimation function using a Monte Carlo method
|
||||
* For 0 to `points`, take 2 random numbers < 1, square and add them to
|
||||
* find the area under that point in a 1x1 square. If that area is <= 1
|
||||
* then it's *within* a quarter-circle, otherwise it's outside.
|
||||
* Take the number of points <= 1 and multiply it by 4 and you have an
|
||||
* estimate!
|
||||
* Do this across multiple processes and average the results to
|
||||
* increase accuracy.
|
||||
*/
|
||||
|
||||
module.exports = function (points, callback) {
|
||||
let inside = 0
|
||||
, i = points
|
||||
|
||||
while (i--)
|
||||
if (Math.pow(Math.random(), 2) + Math.pow(Math.random(), 2) <= 1)
|
||||
inside++
|
||||
|
||||
callback(null, (inside / points) * 4)
|
||||
}
|
41
web/node_modules/worker-farm/examples/pi/index.js
generated
vendored
Normal file
41
web/node_modules/worker-farm/examples/pi/index.js
generated
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
'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)
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue