PHP5.5一個比較好的新功能是實現對生成器和協同程式的支援。對於生成器,PHP的文檔和各種其他的部落格文章(就像這一個或這一個)已經有了非常詳細的講解。協同程序相對受到的關注就少了,所以協同程序雖然有很強大的功能但也很難被知曉,解釋起來也比較困難。
生成器最基本的想法也是函數,這個函數的回傳值是依序輸出,而不是只回傳一個單獨的值。或者,換句話說,生成器使你更方便的實作了迭代器介面。下面透過實作一個xrange函式來簡單說明:
ba03193b87e17b21a79350a4132bfd84
在这篇文章里,我使用多任务协作构建了一个任务调度器,其中包括执行“系统调用”,做非阻塞操作和处理错误。所有这些里真正很酷的事情是任务的结果代码看起来完全同步,甚至任务正在执行大量的异步操作的时候也是这样。如果你打算从套接口读取数据的话,你将不需要传递某个回调函数或者注册一个事件侦听器。相反,你只要书写yield $socket->read()。这儿大部分都是你常常也要编写的,只在它的前面增加yield。
当我第一次听到所有这一切的时候,我发现这个概念完全令人折服,而且正是这个激励我在PHP中实现了它。同时我发现协程真正令人心慌。在令人敬畏的代码和很大一堆代码之间只有单薄的一行,我认为协程正好处在这一行上。讲讲使用上面所述的方法书写异步代码是否真的有益对我来说很难。
以上是PHP中協同程式實作合作多任務詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!