page contents

通俗易懂的php多线程,让你快捷解决方案

所谓的多线程就是在一个进程中可以并发多个线程,每条线程并行执行不同的任务........

attachments-2021-08-NCW18hH9612c56ff982d0.png

所谓的多线程就是在一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程大大提高了程序的执行效率,一个多线程比单线程被操作系统调度的概率更大。而且更高效。多个线程可以在多核CPU的多个核心同时运行,加快了运行效率。而且线程间的通信更加简单。

 

PHP多线程

在默认情况下PHP是不支持多线程的,要使用多线程需要安装 扩展,目前常用的扩展有pcnltPOSIX pthreads,但是用的最多的还是pthreads扩展,它通过使用参数来指定来编译PHP时的线程安全方式,使其支持多线程。

在使用线程之前首先要考虑到线程的安全问题,线程安全指的是某个函数或函数库在多线程环境中被调用时,能够正确的处理多线程之间的共享变量,才能使得程序的功能能够正确完成。

 

PHP多线程的作用 

1、线程是在同一个进程内的,可以共享内存变量实现线程间通信;

 

2、线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源;

 

3、多线程也存在一些问题;

 

4、线程读写变量存在同步问题,需要加锁;

 

5、锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁;

 

6、同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁;

 

7、某个线程发生致命错误会导致整个进程崩溃。

 

PHP模拟实现多线程的三种方式

1linux下的php多线程

下面所讲的东西是源自phppcntl_fork函数.因为这个函数依赖操作系统fork的实现,所以本文所讲的东西只适用于linux/unix。那么先看看这个函数的用法吧.php手册上是这么说的:

attachments-2021-08-IQG63SHT612c57458cd49.png 

通过pcntl_fork创建一个子进程,如果返回值是-1的话,那么说明子进程创建失败.创建成功的进程id会返回给父进程,0返回给子进程.不好理解吧,所以应该这样写:

attachments-2021-08-u4sULPwh612c574c4aa5d.png这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait

 

2.通过stream_socket_client 方式

attachments-2021-08-hfGVMNZ6612c57554163d.pngattachments-2021-08-MiYnnWao612c5765af7f9.png  

3、通过多进程代替多线程

attachments-2021-08-yRfKd0a1612c5771ddef9.png 

 

总结

PHP实现线程安全主要通过 TSRM 机制,通过此机制可以对全局变量和静态变量进行隔离,并且给每个线程都复制了一份全局变量和静态变量。使得各个线程使用的都是主线程的一个备份。这样就避免了变量冲突,也不会发生线程安全的问题。

 

 

 

以上就是有关php多线程的相关内容了,想要了解更多有关php的其它知识也可关注六星社区网站。

  • 发表于 2021-08-30 11:58
  • 阅读 ( 480 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
小柒
小柒

1474 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章