協(xié)程注意事項
變量使用
- 在協(xié)程中,需要特別注意,不要使用
$_GET
、$_POST
、$GLOBALS
等超全局變量,尤其是需要修改變量值并讀取時,將造成協(xié)程間變量數(shù)據(jù)錯亂。 - 協(xié)程中訪問外部變量必須使用
use
關(guān)鍵字,或者傳形參方式,不能引用變量。 - 如果需要做多協(xié)程之間的通信,可使用
channel
方式通信。
擴(kuò)展沖突
swoole
協(xié)程與xdebug
、xhprof
、blackfire
等zend
擴(kuò)展不兼容,例如不能使用xhprof
對協(xié)程server
進(jìn)行性能分析采樣。
退出協(xié)程
在 Swoole >= v4.1.0
之后,使用 exit
退出將只退出當(dāng)前協(xié)程,并在當(dāng)前協(xié)程拋出一個 Swoole\ExitException
異常。
在 Swoole < v4.1.0
時,如果使用 exit
,將會造成整個進(jìn)程退出,禁止使用。
通過攔截 Swoole\ExitException
異常,可獲得這次退出的具體異常信息。
簡單使用示例:
<?php
go(function () {
try {
test();
} catch (\Swoole\ExitException $exception) {
var_dump($exception);
}
});
function test()
{
test2();
}
function test2()
{
exit(2);
}