Re: [RFC] Fibers

From: Date: Tue, 02 Feb 2021 03:04:19 +0000
Subject: Re: [RFC] Fibers
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-113047@lists.php.net to get a copy of this message
Hi Aaron Piotrowski,

> I would like to introduce an RFC for adding full-stack fibers to PHP: https://wiki.php.net/rfc/fibers
>
> Fibers are primarily used to implement green-threads or coroutines for asynchronous I/O. Fibers
> are similar to threads, except fibers exist within a single thread and require cooperative
> scheduling of the fibers by the process. Since fibers do not require a full CPU context switch, they
> are lightweight and more performant than multi-processing or threading for awaiting I/O.
>
> An implementation as an extension is at https://github.com/amphp/ext-fiber
>
> Fibers are a complex feature. The RFC contains many examples and links to code using fibers to
> help explain and demonstrate what is possible, however I’m certain many more questions and
> concerns will arise. Looking forward to feedback and discussion.

I took a look at the amphp/ext-fiber repo a few weeks ago - nothing stood out as a major concern but
I'm only moderately familiar with threading,
A minor comment is that it'd be easier to read the phpt test cases if the
--EXPECTF--
section included the file's basename in the test output of error traces instead of just
%s, etc.
(e.g. tests/002-throw.phpt)

```
Stack trace:
#0 %s(%d): {closure}()
#1 %s(%d): Loop->tick()
#2 %s(%d): Loop->run()
...
```

I didn't see in the test cases/rfc:
How do the zend_try/zend_catch/zend_end_try macros and
zend_error_noreturn macros get handled after a fatal error?
I'm not 100% sure - I think those use setjmp/longjmp internally - will fatal errors continue to
work if there's a fatal error from within a fiber.
(e.g. require_once on a file with a compile-time fatal error such as duplicate
parameters).
I forget exactly how they work, e.g. in the context of a web server before this RFC - at a glance
I'd guess an unrecoverable fatal error would cause the worker to shut down.
Would being in a different fiber and different C stack interfere with the shutdown process for fatal
errors? (I guess the macros could be changed to make that switch to the main fiber if needed to fix
that)

Thanks,
-Tyson Andre


Thread (29 messages)

« previous php.internals (#113047) next »