编程须知
最后更新于:2022-04-02 06:30:20
# 编程须知
[TOC]
使用`Swoole`协程特性,请认真阅读本页编程须知。
## 编程范式
* 协程内部禁止使用全局变量
* 协程使用`use`关键字引入外部变量到当前作用域禁止使用引用
* 协程之间通讯必须使用`Channel`
> 即协程之间通讯不要使用全局变量或者引用外部变量到当前作用域,而要使用`Channel`
* 项目中如果有扩展`hook`了`zend_execute_ex`或者`zend_execute_internal`,需要特别注意一下c栈。可以使用`co::set`重新设置`C`栈大小
> `hook`这两个入口函数后,大部分情况下会把平坦的php指令调用变为`C`函数调用,增加c栈的消耗。
## 扩展冲突
由于某些跟踪调试的`PHP`扩展大量使用了全局变量 可能会导致`Swoole`协程发生崩溃。请关闭这些相关扩展。
> 包括`4.0`和`2.0`
* xdebug
* phptrace
* aop
* molten
* xhprof
* phalcon(`Swoole`协程无法运行在`phalcon`框架中)
## 严重错误
以下行为会导致出现严重错误。
* [在多个协程间共用一个连接](在多个协程间共用同一个协程客户端.md)
* [使用类静态变量/全局变量保存上下文](使用类静态变量-全局变量保存上下文.md)
';