前言
前些天帮同事查一个问题,第一次接触到了 PHP 的多线程,原以为 PHP 普遍都是单线程模型,并不适合多线程领域,花些时间翻了几个多线程的项目源码之后,发现 PHP 的多线程也颇有可取之处,活用起来,用来解决某些问题竟然非常适合。
于是找了几篇文章看了下 PHP 多线程 TSRM
机制的实现,也有所收获,详情可以查看下面的参考文章。本文对比多进程介绍了下多线程的优势和适用场景,提出了一种巧用方案,并使用 PHP 代码实现了多线程的常见用法。
文章欢迎转载,但请注明来源:http://www.cnblogs.com/zhenbianshu/p/7978835.html, 谢谢。
多线程
线程
首先说下线程:
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.
使用多线程主要是因为它在执行效率上有很大优势。由于线程是操作系统能够进行调度的最小单位
:
- 一个多线程程序比单线程程序被操作系统调度的概率更大,所以多线程程序一般会比单线程程序更高效;
- 多线程程序的多个线程可以在多核 CPU 的多个核心同时运行,可以将完全发挥机器多核的优势;
同时对比多进程程序,多线程有以下特点:
- 线程的创建和切换的系统开销都比进程要小,所以一定程度上会比多进程更高效;
- 线程天生的共享内存空间,线程间的通信更简单,避免了进程IPC引入新的复杂度。
适用场景
多线程的优化是很多,可是无脑使用多线程并不能提升程序的执行效率,因为线程的创建和销毁、上下文切换、线程同步等也是有性能损耗的,耗费时间可能比顺序执行的代码还多。如:
sumSmall
是一个从1累加到50000的函数。