Something productive came out of this thread.  I learned the name of the
trampoline technique and came up with a hand-written version of the
benchmark that's 4x faster than the streamline-js version.

var count = 1000000;
function bench(cb) {
  var total = 0;
  function loop(i) {
    var async;
    while (async !== true) {
      async = undefined;
      if (i === count) {
        cb(null, total);
      } else {
        load(__dirname + '/benchCallbacks.js', function(err, data) {
          if (err) return cb(err);
          total += data.length;
          if (async) {
            loop(i + 1);
          } else {
            async = false;
            i++;
          }
        });
      }
      if (async !== false) {
        async = true;
      }
    }
  }
  loop(0);}

Here are the speed numbers I'm getting on my machine with my new trampoline
style version asbenchCallbacks2.js.

tim ~/gist-2362015 $ uname -a
Linux touchsmart 3.2.13-1-ARCH #1 SMP PREEMPT Sat Mar 24 09:10:39 CET
2012 x86_64 Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz GenuineIntel
GNU/Linux
tim ~/gist-2362015 $ node benchCallbacks.js
hit=999999, missed=1, result=805000000
elapsed: 1297
tim ~/gist-2362015 $ _node benchStreamline
hit=999999, missed=1, result=805000000
elapsed: 1001
tim ~/gist-2362015 $ _node --fibers benchStreamline
hit=999999, missed=1, result=805000000
elapsed: 180
tim ~/gist-2362015 $ node benchCallbacks2.js
hit=999999, missed=1, result=805000000
elapsed: 308


Most applications won't notice the speed differences here, but I do
appreciate learning a new technique I'm sure to use in the future.


On Thu, Apr 12, 2012 at 3:36 PM, Mikeal Rogers <mikeal.rog...@gmail.com>wrote:

> How are we defining aggression?
>
> To me, the same 5 people offering the same answer on every related thread,
> representing nearly 60% of the traffic in that thread, for an approach that
> has by any available measure less than 2% of the community adopting it is
> **very aggressive**.
>
> -Mikeal
>
> On Apr 12, 2012, at April 12, 20121:33 PM, Marco Rogers wrote:
>
> Thanks for the backhanded support Axel :)
>
> Since when can we not make general statements once they've proven
> themselves to be generally true? How would we ever have best practices if
> nothing ever presented itself as best in the general sense?
>
> :Marco
>
> On Thursday, April 12, 2012 7:48:13 AM UTC-7, Axel Kittenberger wrote:
>>
>> > JavaScript is asynchronous, Node.js is asynchronous, everything feels
>> > natural (and fibers don't).
>>
>> "Everything feels natural"... now thats a scientific argument how
>> something "feels"?
>>
>> I wont go in this benchmark gaggle, but I agree with Marco Roger, the
>> level of agression from the sync-haters is ridiculous. And both sides
>> eider gaggle around benchmarks, or throw in baseless general
>> statements like: "When you create an abstraction layer, it's almost
>> always slower.". Thats an argument in 2012? Haven't decades of
>> compilers and optimizers tought us (I'm looking at the Assembler vs. C
>> arguments back in the 1970s-1980s) that eventually a compiler/optimize
>> can work way beyond human abilities to micro-optimize things, and we'd
>> rather work on a higher level developing solutions instead of dealing
>> with the minuscule things how the electrons are moved around in the
>> most efficient way?
>>
>> So please everybody get a cool head. Syncs are not going to kill you,
>> neither is anybody going to be forced to use them, neither is async
>> everything that uber cool what you think it is, neither is it not
>> going to change the live of everybody.
>>
>>
>>
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
>
>  --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to