PHP的多样化执行方式(parallel PHP多线程实现,原生协程实现,多进程实现
|
进程、线程、协程
- 进程:应用程序的启动实例,运行起的代码叫进程,有独立的内存空间,类比工厂的P个(P=1单进程,P>1多进程)车间。
- 线程:线程是CPU调度的最小单位,是进程内的执行单元,多个线程共享所属进程的资源。类比车间内的T个员工(T=1单线程,T>1多线程)车间。
- 协程:类似线程,协程是用户态(CPU受限执行用户程序指令),线程是内核态(CPU任意可在操作系统中任意执行任何指令)。通常在函数内部运行,并且可以在函数的不同部分之间暂停和恢复执行(最明显的特点就是协程不一定会跟着函数的return而结束,下次调用时能保留上调用时的状态)。
多进程、多线程怎么选?
做PHP的是几乎不用考虑的,毕竟不是C/C++这种偏底层适合做C/S或单Client的应用,PHP大多都是LAMP或LNMP的架构,结合Windows Server用IIS多线程的从来还没有遇见过。
- 多进程适用场景:
- CPU密集型任务:对于需要大量计算的任务,多进程可以充分利用多核处理器的优势,提高整体处理速度。
- 独立性要求高:如果任务之间需要完全独立的内存空间和资源,避免相互影响,多进程是更好的选择。
- 故障隔离:多进程能够提供更好的故障隔离性,一个进程崩溃不会影响其他进程,提高了系统的可靠性。
- 跨平台兼容性:多进程在跨平台兼容性方面表现更好,因为不同操作系统有不同的线程实现,而进程模型更为统一。
- 多线程适用场景:
- I/O密集型任务:对于需要频繁进行I/O操作的任务,多线程能够更好地利用等待时间,提高系统的响应速度。
- 资源共享:多线程适用于需要共享数据或资源的场景,能够更轻松地实现数据共享和通信。
- 实时性要求高:多线程能够更快速地响应事件和处理任务,适合需要实时性的应用场景。
- 内存消耗较低:线程间共享同一进程的内存空间,相比多进程消耗的内存较少。
- GUI编程:图形界面程序通常需要不同的线程处理用户交互和界面更新,多线程能够提高界面的响应性和流畅性。
多线程实现
- cd /test
- wget https://pecl.php.net/get/parallel-1.2.1.tgz
- tar zxf parallel-1.2.1.tgz
- cd parallel-1.2.1/
- /usr/local/php/bin/phpize
- ./configure
- make
- make install
- vim /usr/local/php/etc/php.ini
- extension=parallel
复制代码 常规测试,输出@@@%%%,说明程序是从上到下依次执行的。
[code]vim /test/a.php |
|
|
|
发表于 2024-5-19 22:28:21
举报
回复
分享
|
|
|
|