> 2020年12月18日 上午12:30,Aaron Piotrowski <aa...@trowski.com> 写道: > > Hello everyone! > > 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. > > Aaron Piotrowski > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > >
Hi there, So glad to see that the RFC of Fiber is back on the agenda. Let me introduce myself first. I'm a very active contributor to Swoole and also a core member of the Swoole developing group. Though Swoole has not been mentioned in the RFC, Swoole has already worked for async/coroutine feature for many years and always doing best in order to be merged into php-src. It's extremely difficult to merge Swoole into php-src fully because Swoole is systematic and complex. Even the coroutine is a core but also a tiny part of Swoole. In recent years, Swoole has been committed to improving stability and overcoming technical problems. It can be said that the current Swoole is very close to the ideal status. What's more, Swoole has been applied widely by advanced enterprises in China. It has been verified by a large amount of real-world applying. We may have more practical experience in many details of the implementation of coroutine technology For the core of Fiber, the context switching of C stack and PHP VM stack, there is no more obvious problem. But there is somewhere worth improving, indeed. Furthermore, we may do more context switching, since Swoole may yield from PHP internal function, which would make the "@" not work. As we could see, the main controversy is what about the FiberScehduler. I think it is designed for the amphp, however, it makes code hard to be comprehended, and it was unnecessary if we just want a minimum coroutine implementation. Just having creation and switching is enough for a minimum coroutine implementation. So did the last Fiber proposal. The implementation of the scheduler is still debatable. Otherwise, compared with the previous Fiber proposal, the most valuable change in the new Fiber proposal is the introduction of C stack coroutine technology. In my opinion, the goal of the new Fiber proposal is not that ambitious. It just eliminates the stack pollution caused by Promise. This makes the style of PHP coroutine neither like the Nodejs which represents the pure stackless coroutine, nor the Lua and Golang which represent pure stack coroutine. Once PHP has a stack coroutine like Fiber, we can do more than what we can do now. Since we can interrupt from PHP internal functions, then we can replace all the implementation of PHP blocking functions, such as sleep(), and we can also replace php_stream so that we can change the implementation of PDO, mysqli, and phpredis into a coroutine way, and we can also make curl become a coroutine version through libcurl's support for multiplexing. In fact, many years ago, amphp-liked solutions were very popular in the Chinese PHP community. But they were replaced by Swoole, eventually. Performance is one of the reasons. Because, indeed, parsing protocol by PHP is disadvantaged compared to parsing by C. Though the amphp-liked solutions dose expand the PHP's capabilities, the performance is not that satisfactory. However, Swoole performs like other static languages. On another hand, the replacement cost. What has been proved is that most PHP programmers want to continue to use common clients such as PDO, mysqli, phpredis, and curl, and the great PHP package and library ecosystem based on these clients is hard to replace. The cost of moving a modern PHP application to Swoole is so low which was unimaginable before. Many success cases there in the community. So what I want to explain is that once the PHP core is ready to accept the Fiber proposal, everyone will start to think, what is the next? Therefore, what Fiber's goal is what the Fiber extension is designed for are particularly important. What I really care about is - does it just simply eliminates the pollution of the stack caused by Promise, or it plans to improve the performance of PHP applications by a hundredfold at a low cost as Swoole did. Regards, Twosee -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php