进程/Process
操作系统中的执行单元,有独立内存空间和系统资源。
进程间相互隔离,通过IPC机制通信,开销大安全性高。
Swoole中Manager进程的子进程包括Worker进程和Task进程,和Master进程并行。
线程/Thread
线程是进程执行单元,共享进程的内存和资源,调度通常采用抢占式方式。
线程间可直接访问共享数据。
PHP本身是单线程,即每次请求是一个进程中仅有一个线程。
PHP可通过安装swoole扩展实现多进程或多线程,网上有其余推荐但是有些是废弃的扩展。
协程/Coroutine
非操作系统操作,有代码管理。
在一个线程中切换多个任务。
协程比线程成本低,适合高并发场景,但需显式挂起/恢复。
纤程/Fiber
纤程是协程的一种具体实现。
PHP中,纤程概念与协程相似。
PHP8中Fiber类和Swoole提供协程式编程接口。
纤程强调协作式调度,由开发者控制切换点,避免了线程的抢占式开销。
总结
多线程比多进程开销小,多进程隔离性强稳定性高。
开销由大到小:进程>线程>协程/纤程
Swoole中协程TCP/UDP服务可以直接使用协程,http服务只能在on回调中使用协程。
Swoole官网文档中分为线程、进程、协程内容,文件异步操作也是在协程中。
参考
[1] 并发编程中的进程、线程、协程与纤程详解: https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_5123704743139249479&sourceFrom=search_a
[2] 进程线程结构图: https://wiki.swoole.com/zh-cn/#/server/init?id=进程线程结构图
[3] PHP多线程与多进程: https://blog.csdn.net/lskob/article/details/154576510