diff --git a/src/Symfony/Component/Messenger/Worker.php b/src/Symfony/Component/Messenger/Worker.php
index <HASH>..<HASH> 100644
--- a/src/Symfony/Component/Messenger/Worker.php
+++ b/src/Symfony/Component/Messenger/Worker.php
@@ -87,6 +87,7 @@ class Worker
 
         while (false === $this->shouldStop) {
             $envelopeHandled = false;
+            $envelopeHandledStart = microtime(true);
             foreach ($this->receivers as $transportName => $receiver) {
                 if ($queueNames) {
                     $envelopes = $receiver->getFromQueues($queueNames);
@@ -113,10 +114,12 @@ class Worker
                 }
             }
 
-            if (false === $envelopeHandled) {
+            if (!$envelopeHandled) {
                 $this->dispatchEvent(new WorkerRunningEvent($this, true));
 
-                usleep($options['sleep']);
+                if (0 < $sleep = (int) ($options['sleep'] - 1e6 * (microtime(true) - $envelopeHandledStart))) {
+                    usleep($sleep);
+                }
             }
         }
[Messenger] subtract handling time from sleep time in worker