diff --git a/src/vennv/vapm/simultaneous/EventLoop.php b/src/vennv/vapm/simultaneous/EventLoop.php index fd156bd3f..acc708435 100644 --- a/src/vennv/vapm/simultaneous/EventLoop.php +++ b/src/vennv/vapm/simultaneous/EventLoop.php @@ -78,7 +78,6 @@ class EventLoop implements EventLoopInterface * @var array */ protected static array $returns = []; - protected static bool $isCleaningGarbage = false; public static function init(): void { @@ -175,10 +174,15 @@ protected static function run(): void { if (count(GreenThread::getFibers()) > 0) GreenThread::run(); + $i = 0; + $limit = min((int)((count(self::$queues) / 2) + 1), 100); // Limit 100 promises per loop + /** * @var Promise $promise */ foreach (self::getQueues() as $promise) { + if ($i >= $limit) break; + $id = $promise->getId(); $fiber = $promise->getFiber(); @@ -196,7 +200,12 @@ protected static function run(): void } MicroTask::addTask($id, $promise); self::$queues->offsetUnset($promise); // Remove from queue + } else { + self::$queues->detach($promise); // Remove from queue + self::$queues->attach($promise, $id); // Add to queue again } + + $i++; } if (count(MicroTask::getTasks()) > 0) MicroTask::run();