From 221956d97f6efdb239d102afdce4b1a13a1ea5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCck?= Date: Wed, 18 Oct 2023 18:26:12 +0200 Subject: [PATCH] Improve performance by avoiding unneeded references in `FiberMap` --- src/FiberMap.php | 24 +----------------------- src/functions.php | 13 +++++-------- 2 files changed, 6 insertions(+), 31 deletions(-) diff --git a/src/FiberMap.php b/src/FiberMap.php index f843a2d..5996ec5 100644 --- a/src/FiberMap.php +++ b/src/FiberMap.php @@ -11,24 +11,9 @@ */ final class FiberMap { - /** @var array */ - private static array $status = []; - /** @var array> */ private static array $map = []; - /** @param \Fiber $fiber */ - public static function register(\Fiber $fiber): void - { - self::$status[\spl_object_id($fiber)] = false; - } - - /** @param \Fiber $fiber */ - public static function cancel(\Fiber $fiber): void - { - self::$status[\spl_object_id($fiber)] = true; - } - /** * @param \Fiber $fiber * @param PromiseInterface $promise @@ -40,9 +25,8 @@ public static function setPromise(\Fiber $fiber, PromiseInterface $promise): voi /** * @param \Fiber $fiber - * @param PromiseInterface $promise */ - public static function unsetPromise(\Fiber $fiber, PromiseInterface $promise): void + public static function unsetPromise(\Fiber $fiber): void { unset(self::$map[\spl_object_id($fiber)]); } @@ -55,10 +39,4 @@ public static function getPromise(\Fiber $fiber): ?PromiseInterface { return self::$map[\spl_object_id($fiber)] ?? null; } - - /** @param \Fiber $fiber */ - public static function unregister(\Fiber $fiber): void - { - unset(self::$status[\spl_object_id($fiber)], self::$map[\spl_object_id($fiber)]); - } } diff --git a/src/functions.php b/src/functions.php index 8d314d8..bcf40c1 100644 --- a/src/functions.php +++ b/src/functions.php @@ -200,16 +200,13 @@ function async(callable $function): callable $reject($exception); } finally { assert($fiber instanceof \Fiber); - FiberMap::unregister($fiber); + FiberMap::unsetPromise($fiber); } }); - FiberMap::register($fiber); - $fiber->start(); }, function () use (&$fiber): void { assert($fiber instanceof \Fiber); - FiberMap::cancel($fiber); $promise = FiberMap::getPromise($fiber); if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) { $promise->cancel(); @@ -294,9 +291,9 @@ function await(PromiseInterface $promise): mixed $lowLevelFiber = \Fiber::getCurrent(); $promise->then( - function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFiber, $promise): void { + function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFiber): void { if ($lowLevelFiber !== null) { - FiberMap::unsetPromise($lowLevelFiber, $promise); + FiberMap::unsetPromise($lowLevelFiber); } /** @var ?\Fiber $fiber */ @@ -309,9 +306,9 @@ function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFibe $fiber->resume($value); }, - function (mixed $throwable) use (&$rejected, &$rejectedThrowable, &$fiber, $lowLevelFiber, $promise): void { + function (mixed $throwable) use (&$rejected, &$rejectedThrowable, &$fiber, $lowLevelFiber): void { if ($lowLevelFiber !== null) { - FiberMap::unsetPromise($lowLevelFiber, $promise); + FiberMap::unsetPromise($lowLevelFiber); } if (!$throwable instanceof \Throwable) {