我找不到stream_socket_client()和相关的fsockopen()在最近的PHP版本(>5.3)中是否是合理的线程安全的。
我最感兴趣的是Apache上的PHP,在Linux上。还有Apache MPM-prefork是否有所不同,以及是否存在知识,如果这些都适用于例如Nginx下的fastCGI。
一个简单的测试表明,每个fork都会创建自己的套接字文件,但对于更多的并发连接,这是否成立?这是由于Apache分支的本质、Unix的套接字体系结构还是PHP本身?当涉及到这些近乎金属的问题时,我相当不知所措。
或者:假设使用stream_socket_client()读取和写入源代码时,不会在不同的连接上发生冲突,这是安全的吗?
发布于 2012-11-02 08:48:01
关于pthread:
PHP的架构在这一点上是板上钉钉的-所以事实是,你现在或将来能够线程任何你识别为PHP的东西的唯一方法是通过一个PHP6扩展,但你不应该被它吓倒-你不会仅仅因为它不是核心的一部分而放弃你的网络的APC功能。我可能有点偏见,因为我是pthread的唯一作者,但我没有使用巫毒或咒语,我使用的是对象API,结合了TSRM,显然还有扩展API -所有这些东西都已经酝酿了很多年,并有数十亿小时的现实世界测试,这并不是说pthread已经准备好生产了,当然不是,但总有一天会准备好的。
pthreads不太可能共享资源,我对此进行了长时间的实验,我找到了多种方法来使其工作,但没有一种方法是令人满意的。PHP主要是扩展(甚至连标准库都是作为扩展实现的--这是添加功能的最有效的方式),而且它们都没有为对象级多线程环境做好准备。由于许多原因,PHP不是多线程网络应用程序的好候选者。当你以一种非线性的方式思考时,为什么你想要共享一个资源(套接字-使用更合适的东西),当你开始解析你的模板或json或任何你的应用程序所做的事情时,资源可以在一个完全不同的线程中创建和操作。考虑到这一点,我不觉得有必要将共享资源作为pthread的优先事项,甚至是目标。
https://stackoverflow.com/questions/13126196
复制相似问题