fastparallel, node.js的零开销并行函数调用 同时支持每个和地图 !

分享于 

5分钟阅读

GitHub

  繁體 雙語
Zero-overhead parallel function call for node.js. Also supports each and map!
  • 源代码名称:fastparallel
  • 源代码网址:http://www.github.com/mcollina/fastparallel
  • fastparallel源代码文档
  • fastparallel源代码下载
  • Git URL:
    git://www.github.com/mcollina/fastparallel.git
    Git Clone代码到本地:
    git clone http://www.github.com/mcollina/fastparallel
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mcollina/fastparallel
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    fastparallel Build Status

    node.js的零开销并行函数调用。 同时支持每个和地图 !

    执行 3调用 setImmediate 1次的基准:

    • 不可重用的setImmediate: 1781 ms
    • async.parallel: 3484毫秒
    • async.each: 2621毫秒
    • async.map: 3054毫秒
    • neoAsync.parallel: 2162毫秒
    • neoAsync.each: 2156毫秒
    • neoAsync.map: 2080毫秒
    • insync.parallel: 10252毫秒
    • insync.each: 2397毫秒
    • insync.map: 9700毫秒
    • items.parallel: 3725毫秒
    • parallelize: 2928毫秒
    • 带有结果的fastparallel: 2139 ms
    • 没有结果的fastparallel: 1957 ms
    • fastparallel 地图:2102毫秒
    • fastparallel: 1941毫秒

    这些基准基准通过 bench.js 在 node v4.2.2上的Retina 中间 2014 ( 宋体,16GB 个 RAM ) 上获取。

    如果需要零开销系列函数调用,请查看 fastseries。 如果你需要一个快速工作队列,请查看 fastq。 如果你需要运行快速瀑布式调用,请使用 fastfall。

    js-standard-style

    在版本5 和 2. x. x 之间的主要差异是 ,这是现在的结果,现在可以在每一个例子中替换异步。

    并行调用示例

    var parallel =require('fastparallel')({
     // this is a function that will be called// when a parallel completes released: completed,
     // if you want the results, then here you are results:true})parallel(
     {}, // what will be this in the functions [something, something, something], // functions to call42, // the first argument of the functions done // the function to be called when the parallel ends)functionsomething (arg, cb) {
     setImmediate(cb, null, 'myresult')
    }functiondone (err, results) {
     console.log('parallel completed, results:', results)
    }functioncompleted () {
     console.log('parallel completed!')
    }

    每个和映射调用的示例

    var parallel =require('fastparallel')({
     // this is a function that will be called// when a parallel completes released: completed,
     // if you want the results, then here you are// passing false disables map results:true})parallel(
     {}, // what will be this in the functions something, // functions to call [1, 2, 3], // the first argument of the functions done // the function to be called when the parallel ends)functionsomething (arg, cb) {
     setImmediate(cb, null, 'myresult')
    }functiondone (err, results) {
     console.log('parallel completed, results:', results)
    }functioncompleted () {
     console.log('parallel completed!')
    }

    警告

    即使发生了多个错误,done 函数也只能被调用一次。

    这个库通过缓存最近使用的函数来工作,这样运行一个新并行不会导致任何内存分配事件的负担。

    为什么这么快?

    这个库的缓存功能很多。

    V8优化:由于缓存,可以通过 V8 ( 如果它们是可以优化的我非常小心地把它们制造出来) 优化函数。

    如果只需要队列,则不要使用数组。 如果你不需要访问两个进程之间的元素,则通过进程实现的链接列表要快得多。

    接受传递这里函数的函数。 感谢这个 hack,你可以提取函数,并将它们放在不在每个执行中创建的外部级别。

    许可证

    ISC


    PAR  SUP  FUNC  函数  CAL  调用  
    相关文章