简单来说, 容器通过反射机制可获取目标方法的依赖 ( laravel 用反射来获取 typehint 类型约束, 而 Swoft项目似乎与spring 相似, 是从注释上获取的)....中, 类似 laravel 的 serviceProvider 分两处注册.
// 在worker中注册的服务, 多个请求共享
'processProviders' => [
// 基础组件加载..., 才通过父类来做实例化....所以直接使用了 Laravel 的 Application 做 “进程级容器”, 确保自己请求中用到的核心业务逻辑都不注册到 laravel中, 避免污染....就我发现, 最容易导致内存泄露的两种情况:
某个闭包在每次请求时生成一个闭包实例, 被每个容器持有
容器生成的某个服务是匿名类, 导致相互持有
简单来说, 就是定义闭包和匿名类时, 慎重考虑内存泄露的可能性就行