所谓的多线程就是在一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程大大提高了程序的执行效率,一个多线程比单线程被操作系统调度的概率更大。而且更高效。多个线程可以在多核CPU的多个核心同时运行,加快了运行效率。而且线程间的通信更加简单。
PHP多线程
在默认情况下PHP是不支持多线程的,要使用多线程需要安装 扩展,目前常用的扩展有pcnlt,POSIX ,pthreads,但是用的最多的还是pthreads扩展,它通过使用参数来指定来编译PHP时的线程安全方式,使其支持多线程。
在使用线程之前首先要考虑到线程的安全问题,线程安全指的是某个函数或函数库在多线程环境中被调用时,能够正确的处理多线程之间的共享变量,才能使得程序的功能能够正确完成。
PHP多线程的作用
1、线程是在同一个进程内的,可以共享内存变量实现线程间通信;
2、线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源;
3、多线程也存在一些问题;
4、线程读写变量存在同步问题,需要加锁;
5、锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁;
6、同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁;
7、某个线程发生致命错误会导致整个进程崩溃。
PHP模拟实现多线程的三种方式
1、linux下的php多线程
下面所讲的东西是源自php的pcntl_fork函数.因为这个函数依赖操作系统fork的实现,所以本文所讲的东西只适用于linux/unix。那么先看看这个函数的用法吧.php手册上是这么说的:
通过pcntl_fork创建一个子进程,如果返回值是-1的话,那么说明子进程创建失败.创建成功的进程id会返回给父进程,0返回给子进程.不好理解吧,所以应该这样写:
这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait。
2.通过stream_socket_client 方式
3、通过多进程代替多线程
总结
PHP实现线程安全主要通过 TSRM 机制,通过此机制可以对全局变量和静态变量进行隔离,并且给每个线程都复制了一份全局变量和静态变量。使得各个线程使用的都是主线程的一个备份。这样就避免了变量冲突,也不会发生线程安全的问题。
以上就是有关php多线程的相关内容了,想要了解更多有关php的其它知识也可关注六星社区网站。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!