diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index <HASH>..<HASH> 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -19,6 +19,7 @@ export default function queue(worker, concurrency, payload) {
     var numRunning = 0;
     var workersList = [];
 
+    var processingScheduled = false;
     function _insert(data, insertAtFront, callback) {
         if (callback != null && typeof callback !== 'function') {
             throw new Error('task callback must be a function');
@@ -46,7 +47,14 @@ export default function queue(worker, concurrency, payload) {
                 q._tasks.push(item);
             }
         }
-        setImmediate(q.process);
+
+        if (!processingScheduled) {
+            processingScheduled = true;
+            setImmediate(function() {
+                processingScheduled = false;
+                q.process();
+            });
+        }
     }
 
     function _next(tasks) {
diff --git a/perf/suites.js b/perf/suites.js
index <HASH>..<HASH> 100644
--- a/perf/suites.js
+++ b/perf/suites.js
@@ -276,6 +276,8 @@ module.exports = [{
 }, {
     name: "queue",
     args: [
+        [10],
+        [100],
         [1000],
         [30000],
         [100000],
Improve `async.queue` start up performance (#<I>)

* batch queue.push calls



* add more queue perf suites



* undo dist changes



* prevent overwriting q.process from pausing the queue