Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php stream\u socket\u client()是否线程安全?_Php_Sockets_Thread Safety - Fatal编程技术网

Php stream\u socket\u client()是否线程安全?

Php stream\u socket\u client()是否线程安全?,php,sockets,thread-safety,Php,Sockets,Thread Safety,在最近的PHP版本(>5.3)中,我找不到和相关的线程是否是合理的线程安全的 我对Apache和Linux上的PHP最感兴趣。还有,Apache MPM prefork是否起到了作用,以及是否存在知识,这些知识是否适用于例如Nginx下的fastCGI 一个简短的测试向我显示,每个fork都将创建自己的套接字文件,但对于更多并发连接,这是否成立?这是因为Apache的分叉、Unix的套接字体系结构还是PHP本身?当涉及到这些接近金属的问题时,我是相当无知的 或者:可以安全地假设,当使用strea

在最近的PHP版本(>5.3)中,我找不到和相关的线程是否是合理的线程安全的

我对Apache和Linux上的PHP最感兴趣。还有,Apache MPM prefork是否起到了作用,以及是否存在知识,这些知识是否适用于例如Nginx下的fastCGI

一个简短的测试向我显示,每个fork都将创建自己的套接字文件,但对于更多并发连接,这是否成立?这是因为Apache的分叉、Unix的套接字体系结构还是PHP本身?当涉及到这些接近金属的问题时,我是相当无知的


或者:可以安全地假设,当使用
stream\u socket\u client()
读取和写入源代码时,不会在不同的连接上发生冲突吗?

PHP本身对线程的支持很少。它可能会也可能不会对“线程安全”的函数做出承诺,但当解释器自己假装线程不存在时,这几乎没有什么区别*

不过,就mpm_prefork而言,这并不重要。Prefork MPM完全是关于分叉的(因此得名)。它不涉及线程,因此PHP的线程安全问题不会真正出现

我不太了解FastCGI(特别是它与老式CGI的区别),但除非它需要解释器的大量特殊支持,否则它也将使用多进程模型,而不是多线程模型。每个解释器都有自己的进程,这使得PHP对线程的支持几乎无关紧要


*有一个PECL模块为PHP提供了一种使用pthreads的方法,但它不是核心的一部分,我想当线程开始工作时,会有一大堆扩展将一切都破坏。我认为PHP中的线程不太接近成熟,可以用于生产使用,在PHP本身提供了一种创建线程的方法之前,它可能会继续这样的感觉。

关于pTrp:

PHP的体系结构在这一点上是一成不变的——请阅读关于PHP6的内容——因此事实上,现在或将来,您能够插入任何您认为是PHP的东西的唯一方法是通过PECL扩展,但是你不应该让这件事让你感到不快——你不会因为APC不是核心的一部分就从你的网络中获得APC的能力。我可能有点偏颇,因为我是pthreads的唯一作者,但我没有使用巫毒或咒语,我使用的是Objects API,结合TSRM和扩展API-所有这些东西已经制作了很多年,并且有数十亿小时的实际测试,这并不是说pthreads已经准备好生产了,当然不是,但总有一天它会准备好的


pthreads可能永远不会共享资源,我对此进行了详细的实验,并找到了多种方法使其工作,但没有一种是令人满意的。PHP主要是扩展(甚至标准库也是作为扩展实现的——这是添加功能的最有效方式),它们都没有为对象级多线程环境做好准备。由于许多原因,PHP并不是多线程网络应用程序的理想选择。当你以一种非线性的方式思考时,为什么你想共享一个资源(撇开套接字不谈——使用更合适的东西),当你开始解析你的模板或json或者你的应用程序所做的任何事情时,可以在一个完全不同的线程中创建和操作资源。考虑到这一点,我不觉得有必要将共享资源作为pthreads的优先事项,甚至不是pthreads的目标。

PHP有线程吗?这对我来说是个新闻…甚至你的描述似乎都表明你在使用进程而不是线程。(线程不“分叉”,进程“分叉”)PHP线程安全吗?有些人说,不管盒子上印的是什么,“还没有”无论如何,如果你能扩展你已经开始做的测试,那就太酷了。最大限度地利用它。@cHao AFAICT不是PHP,而是它周围的服务器,因此我的问题是apache MPM prefork如何适应这张图片。@berkes:MPM prefork是一个多进程MPM。好吧,它没有线程,所以任何线程安全问题都是无关紧要的。@cHao如果你回答这个问题,我们可以在那里讨论,而不是把评论变成聊天,因为我对你说的有一些问题。