mysql8 是多进程吗
我在某PHP大牛上面看到这样一段话:
我之前的文章中说过,大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统、环境都不用安装配置),而是在于MySQL数据库。如果用 MySQL 数据库,一条联合查询的SQL,也许就可以处理完业务逻辑,但是,遇到大量并发请求,就歇菜了。如果用 NoSQL 数据库,也许需要十次查询,才能处理完同样地业务逻辑,但每次查询都比 MySQL 要快,十次循环NoSQL查询也许比一次MySQL联合查询更快,应对几万次/秒的查询完全没问题。如果加上PHP多线程,通过十个线程同时查询NoSQL,返回结果汇总输出,速度就要更快了。我们实际的APP产品中,调用一个通过用户喜好实时推荐商品的PHP接口,PHP需要对BigSea NoSQL数据库发起500~1000次查询,来实时算出用户的个性喜好商品数据,PHP多线程的作用非常明显。
- 并发上来之后,应该通过缓存来解决问题,只要进行了恰当的缓存,SQL 或 NoSQL 并不是性能的决定性因素。
- 在服务器资源(CPU 和内存)没有用满的前提下,多线程才会提高性能;而如果资源已经用尽了,多少线程都没用。所以关键是如何将服务器资源恰当地用满
- 还有更高效的方法,利用IO复用,原理就是一个进程(线程)中,把10查询批量发送出去,然后批量等待结果。这样就少了线程创建及相互通讯的开销,更快速高效。php中可以利用mysqli的异步功能来实现,也可以用socket_select/stream_select实现
然后关于 PHP 与多线程:
严格来说 PHP 的多线程指的应该是 pecl 中的 pthreads. 这个东西很少有人会用到,我也不建议大家用,因为通常情况需要用到 pthreads 的时候通常是这个工作不适合 PHP 来做。
如果说 PHP 和多线程有什么关系,那就是 PHP 不同于其他的一些后端语言,通常 PHP 的运行环境是由 PHP-FPM 管理的若干个独立的 PHP 进程组成的。因此 PHP 天然地可以非常方便地横向扩充:增加 PHP-FPM 的进程数,甚至把 PHP-FPM 分散在两台服务器上。
多进程快是因为利用了系统多核的资源,如果是单核,一般会比单进程慢