首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stream_socket_client()是线程安全的吗?

stream_socket_client()是线程安全的吗?
EN

Stack Overflow用户
提问于 2012-10-30 00:57:14
回答 1查看 569关注 0票数 0

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

我最感兴趣的是Apache上的PHP,在Linux上。还有Apache MPM-prefork是否有所不同,以及是否存在知识,如果这些都适用于例如Nginx下的fastCGI。

一个简单的测试表明,每个fork都会创建自己的套接字文件,但对于更多的并发连接,这是否成立?这是由于Apache分支的本质、Unix的套接字体系结构还是PHP本身?当涉及到这些近乎金属的问题时,我相当不知所措。

或者:假设使用stream_socket_client()读取和写入源代码时,不会在不同的连接上发生冲突,这是安全的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-02 08:48:01

关于pthread:

PHP的架构在这一点上是板上钉钉的-所以事实是,你现在或将来能够线程任何你识别为PHP的东西的唯一方法是通过一个PHP6扩展,但你不应该被它吓倒-你不会仅仅因为它不是核心的一部分而放弃你的网络的APC功能。我可能有点偏见,因为我是pthread的唯一作者,但我没有使用巫毒或咒语,我使用的是对象API,结合了TSRM,显然还有扩展API -所有这些东西都已经酝酿了很多年,并有数十亿小时的现实世界测试,这并不是说pthread已经准备好生产了,当然不是,但总有一天会准备好的。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13126196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档