为什么PHP不支持多线程?

5

我已经在各处看到PHP不支持多线程,但有一些绕路可走。但是,为什么PHP不支持多线程呢?对于一个服务器端脚本语言来说,这似乎是一个显而易见的缺陷。


1
我认为你说的脚本语言很贴切。它并不是为了解决问题而设计的完整解决方案,更多的是一种粘合剂。如果你需要使用线程,那么最好使用比PHP性能更优秀的东西。PHP有点...呃...古怪,没有更少冒犯性的词可以形容。 - Wug
嗯...Python通常被认为是“脚本语言”(尽管它在完整的编程语言中有些模糊)。据我所知,你甚至可以在Python中使用线程,即使在Web开发中也可以吧?http://docs.python.org/library/threading.html - skytreader
1
你可以说是可以的。在Python中,线程有点受限。不过同样的规则适用,如果你正在做一些严重依赖效率的事情,那么Python并不是一个好选择。至少,人们普遍认为Python的设计比PHP要好。 - Wug
2个回答

10

请阅读这个链接,我认为它对你有帮助。

PHP多线程 - 模拟多线程

http://w-shadow.com/blog/2007/08/20/php-multithreading-faking-it/

PHP本身不支持真正的多线程,但是有一些方法可以实现“模拟”多线程。以下是我在PHPClasses.org通讯中看到的其中一种 -

模拟多线程

请注意,这个类是用于在Web服务器上使用的,而不是从命令行(或类似方式)运行PHP脚本。如果您正在使用PHP作为独立的脚本语言,请查看本篇文章末尾的一些替代方法。


-3

几年后的编辑:你可以使用pthreads进行PHP多线程,但你真的想这么做吗?

我不确定在许多托管环境中是否可用pthreads。而且坦率地说,我不急于找出。

对于许多应用程序来说,PHP最大的优势之一是其隔离性:一个进程,一个请求。通常通过在请求期间排队作业并在其他地方执行来进行多处理。例如,Laravel有“队列”:https://laravel.com/docs/5.7/queues


因为 PHP 并没有考虑到多线程编程,而加入多线程编程需要巨大的努力(基本上是全部重写)。

有人会说 PHP 实际上就是一堆垃圾:http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/。从这个角度来看,不包括线程也就不足为奇了。


那么...我们只是晚了(多线程)派对?就这样?有点令人失望 :| 。那么为什么一开始没有考虑多线程支持呢?Rasmus Lerdorf 懒惰了吗? - skytreader
4
PHP 最初是 Rasmus 为了追踪他的在线简历(http://www.php.net/manual/en/history.php.php)的访问而开始的一个特定个人项目。从那时起,它发展成为了“其他东西”。 - We Are All Monica
2
@jnylen 这个回答似乎很糟糕。自2012年以来,PHP就已经支持多线程了。请查看 Pthreads。此外,PHP App Server也是使用pthread构建的。 - webblover
@jnylen 我认为你可以改进你的回答。PHP通过Pthreads支持多线程。请确认一下。 - Md Riadul Islam
自2012年以来,我学到了很多东西。但我仍不会尝试使用多线程的PHP。 - We Are All Monica
PHP是现代语言中独一无二的,它诞生于Web服务器。它的优势与请求导向、服务器端执行的上下文紧密相连。 - We Are All Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接