PHP中对于并发/并行相关概念
- 推荐链接
- [多进程(fork / pcntl_fork())](#多进程(fork / pcntl_fork()))
- 多线程(pthreads)
- 并行扩展(parallel)
- [异步任务池 / 协程(Swoole / Workerman)](#异步任务池 / 协程(Swoole / Workerman))
- [多进程 CLI 调度(spawn/exec 多个 PHP CLI 进程)](#多进程 CLI 调度(spawn/exec 多个 PHP CLI 进程))
推荐链接
并发(concurrency)是"有很多任务在同一时间段里交替进行",不一定同时运行;
并行(parallelism)是"多个任务在同一时刻同时运行"(真正并行需要多核/多CPU)。
多进程(fork / pcntl_fork())
通过操作系统把当前进程复制出若干子进程(每个子进程拥有自己的内存地址空间)。父子进程可以通过管道、socket、共享内存或文件/DB通信(IPC)。
javascript
123
多线程(pthreads)
线程是进程内的执行单元,多个线程共享同一进程的内存空间(变量、资源共享更方便)。
并行扩展(parallel)
parallel 是一个较新的 PECL 扩展,提供线程/任务并行模型(可创建 Runtime/Threads 并在其中运行 closures),比 pthreads 更现代、更安全。每个 Runtime 有自己的上下文(类似轻量进程)。
异步任务池 / 协程(Swoole / Workerman)
通过事件循环 + 协程(轻量线程)/回调,把大量 IO 操作以非阻塞方式运行在单个或少量线程/进程上。协程看起来像同步代码,但底层是异步调度。
多进程 CLI 调度(spawn/exec 多个 PHP CLI 进程)
主进程以 shell/系统调用 exec/popen/proc_open 启动多个独立的 php CLI 进程(每个运行一个脚本/命令),每个子进程负责一部分工作(例如插入数据库的一批数据),主进程等待或轮询子进程完成。