Starting N processes simultaneously, where N is the number of stylesheets the user has, is a bad idea.  It would really hammer the OS to try and start tens of processes, let alone hundreds.  Ruby uses a lot of memory and processes have reasonable overhead to begin with.

As long as we decide we're going to limit it, the number of CPUs seems like a reasonable limit, since it won't be faster to increase this number (assuming node is reporting the number of logical processors).

Out of curiosity, I did try "forEach" first, which would start all the processes simultaneously.  It performed only trivially worse than forEach, but with even a small number of stylesheets I started to get this warning in console:

    (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
    Trace
        at WriteStream.EventEmitter.addListener (events.js:160:15)
        at WriteStream.Readable.on (_stream_readable.js:679:33)
        at Socket.Stream.pipe (stream.js:65:8)
        at C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt-contrib-sass\tasks\sass.js:79:19
        at C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt\node_modules\async\lib\async.js:86:13
        at Array.forEach (native)
        at _forEach (C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt\node_modules\async\lib\async.js:26:24)
        at Object.async.forEach (C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt\node_modules\async\lib\async.js:85:9)
        at Object.<anonymous> (C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt-contrib-sass\tasks\sass.js:23:22)
        at Object.<anonymous> (C:\Users\altano\Documents\Projects\norbauer.com\node_modules\grunt\lib\grunt\task.js:258:15)

Let me know if you'd like me to experiment with different numbers for the limit.