您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP在什么情况下会使用多进程?

2024/3/17 18:49:32发布25次查看
我在某php大牛上面看到这样一段话:
 我之前的文章中说过,大多数网站的性能瓶颈不在php服务器上,因为它可以简单地通过横向增加服务器或cpu核数来轻松应对(对于各种云主机,增加vps或cpu核数就更方便了,直接以备份镜像增加vps,连操作系统、环境都不用安装配置),而是在于mysql数据库。如果用 mysql 数据库,一条联合查询的sql,也许就可以处理完业务逻辑,但是,遇到大量并发请求,就歇菜了。如果用 nosql 数据库,也许需要十次查询,才能处理完同样地业务逻辑,但每次查询都比 mysql 要快,十次循环nosql查询也许比一次mysql联合查询更快,应对几万次/秒的查询完全没问题。如果加上php多线程,通过十个线程同时查询nosql,返回结果汇总输出,速度就要更快了。我们实际的app产品中,调用一个通过用户喜好实时推荐商品的php接口,php需要对bigsea nosql数据库发起500~1000次查询,来实时算出用户的个性喜好商品数据,php多线程的作用非常明显。
我的理解是这样的.php与mysql结合的话,根本用不了多线程或者多进程的这样的东西.
因为一个sql查询,只可能在一个进程里面.
而nosql不一样了.我可以讲很复杂的查询分成10个小查询,用每个单独的线程去查询nosql再汇总..就比使用一个现程或者进程快.
还有一种多进程的使用场景是不是日志系统?
那么多进程,运行的信息肯定要写在一个日志文件里面.
就要考虑读写的同步了.
那么问题来了:
1 .挖掘机学校哪家强?
2 .php在什么情况下需要使用到多进程(多线程)?
3 .php在什么情况下需要考虑到多进程(多线程)读写的同步呢(比如日志系统)?
还有一个问题,我现在感觉到了一丝迷惑.就是假设用户上传了一张图片,其他用户来访问.那么就有很多的php进程来读这张图片.是不是当一个进程在读的时候,另外的进程就要等待了?
那比如我的php有一万个进程,那等1000个进程读这个文件的时候,用户不就等了很长时间吗
服务器的资源都是共用的,那么多php进程来读他,怎么还那么快呢
回复内容: 我在某php大牛上面看到这样一段话:
 我之前的文章中说过,大多数网站的性能瓶颈不在php服务器上,因为它可以简单地通过横向增加服务器或cpu核数来轻松应对(对于各种云主机,增加vps或cpu核数就更方便了,直接以备份镜像增加vps,连操作系统、环境都不用安装配置),而是在于mysql数据库。如果用 mysql 数据库,一条联合查询的sql,也许就可以处理完业务逻辑,但是,遇到大量并发请求,就歇菜了。如果用 nosql 数据库,也许需要十次查询,才能处理完同样地业务逻辑,但每次查询都比 mysql 要快,十次循环nosql查询也许比一次mysql联合查询更快,应对几万次/秒的查询完全没问题。如果加上php多线程,通过十个线程同时查询nosql,返回结果汇总输出,速度就要更快了。我们实际的app产品中,调用一个通过用户喜好实时推荐商品的php接口,php需要对bigsea nosql数据库发起500~1000次查询,来实时算出用户的个性喜好商品数据,php多线程的作用非常明显。
我的理解是这样的.php与mysql结合的话,根本用不了多线程或者多进程的这样的东西.
因为一个sql查询,只可能在一个进程里面.
而nosql不一样了.我可以讲很复杂的查询分成10个小查询,用每个单独的线程去查询nosql再汇总..就比使用一个现程或者进程快.
还有一种多进程的使用场景是不是日志系统?
那么多进程,运行的信息肯定要写在一个日志文件里面.
就要考虑读写的同步了.
那么问题来了:
1 .挖掘机学校哪家强?
2 .php在什么情况下需要使用到多进程(多线程)?
3 .php在什么情况下需要考虑到多进程(多线程)读写的同步呢(比如日志系统)?
还有一个问题,我现在感觉到了一丝迷惑.就是假设用户上传了一张图片,其他用户来访问.那么就有很多的php进程来读这张图片.是不是当一个进程在读的时候,另外的进程就要等待了?
那比如我的php有一万个进程,那等1000个进程读这个文件的时候,用户不就等了很长时间吗
服务器的资源都是共用的,那么多php进程来读他,怎么还那么快呢
我的理解是这样的.php与mysql结合的话,根本用不了多线程或者多进程的这样的东西. 因为一个sql查询,只可能在一个进程里面.
而nosql不一样了.我可以讲很复杂的查询分成10个小查询,用每个单独的线程去查询nosql再汇总..就比使用一个现程或者进程快
还有更高效的方法,利用io复用,原理就是一个进程(线程)中,把10查询批量发送出去,然后批量等待结果。这样就少了线程创建及相互通讯的开销,更快速高效。php中可以利用mysqli的异步功能来实现,也可以用socket_select/stream_select实现
2 .php在什么情况下需要使用到多进程(多线程)?
一般是当现有架构例如nginx+fpm 无法不支持需求时,例如需要非http协议的通讯,php的长链接通讯,nginx+fpm架构很难做到,就需要php多进程了,用一堆php进程(线程)监听某个端口,解析协议维持链接等。非http协议及长链接应用可以用workerman这类的框架,是一个常驻内存的多进程socket服务器框架
3 .php在什么情况下需要考虑到多进程(多线程)读写的同步呢?
当多个进程(线程)读写同一个文件时,就要考虑同步或者说互斥,不能一个进程刚写了一半另外一个进程就去读
那比如我的php有一万个进程,那等1000个进程读这个文件的时候,用户不就等了很长时间吗
读取可以并发的读,不用排队。写需要排队。
服务器的资源都是共用的,那么多php进程来读他,怎么还那么快呢
多进程快是因为利用了系统多核的资源,如果是单核,一般会比单进程慢
不知道你引用的文章是哪里的,我并不同意其中的观点,因此我们先说你引用的片段中描述的观点有什么问题:
并发上来之后,应该通过缓存来解决问题,只要进行了恰当的缓存,sql 或 nosql 并不是性能的决定性因素。在服务器资源(cpu 和内存)没有用满的前提下,多线程才会提高性能;而如果资源已经用尽了,多少线程都没用。所以关键是如何将服务器资源恰当地用满。然后关于 php 与多线程:
严格来说 php 的多线程指的应该是 pecl 中的 pthreads. 这个东西很少有人会用到,我也不建议大家用,因为通常情况需要用到 pthreads 的时候通常是这个工作不适合 php 来做。
如果说 php 和多线程有什么关系,那就是 php 不同于其他的一些后端语言,通常 php 的运行环境是由 php-fpm 管理的若干个独立的 php 进程组成的。因此 php 天然地可以非常方便地横向扩充:增加 php-fpm 的进程数,甚至把 php-fpm 分散在两台服务器上。
所以说了这么多,你的两个问题无从谈起了...
保持简单,php之所有成功就是其简单的每一个请求一次加载所有资源,处理完释放所有资源,任何性能相关的计算,可以转接到其它更加适合的语言上,比如java服务,典型的如solr搜索
不过,随着hhvm环境,swool(应该是它)扩展的慢慢成熟,php也可以常驻内存了,那这个时候,会有相应的扩展来做多线程操作,甚至会有协程库~
我们用到的多进程,都不在web中,感觉是找死。web业务使用fpm加进程池就可以了。
多进程的业务,一般用在php写的shell工具中,比如单线程计算每天的数据比较慢,多开几个进程会快一些;还用socket写的后台业务需要生成子进程去处理等。
回答不满意,暂时清空。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product