关于线程和进程的疑问

2015-12-18 11:19:00 +08:00
 ben548

之前在做 php 的开发时从来没有想过线程的问题(野生程序员的悲哀),最近在看朴灵写的《深入浅出 nodejs 》时,第九章提到了进程和线程。

1 、对于这两个概念我一直很模糊,在网上查到的资料是阮一峰写的一篇文章,他把一个进程比作一间工厂,一个线程比作工厂里面的工人,那么是不是可以这么理解,一个进程可以包含多个线程,开启多进程主要是为了实现多 cpu 的最大利用化呢?

2 、还有我了解到 php 是不支持多线程的,那么在多人访问网站的情况下不是会造成阻塞吗?但是事实上我们在浏览网站的时候好像并没有什么阻塞的情况发生啊?是因为 apache 做了什么吗?

3 、另外 apache 和 nginx 处理 php 请求上有什么区别呢?为什么现在的网站都趋向于使用 nginx ,而不是 apache ,我对这两者的理解,只有 apache 是通过模块调用的方式来处理 php 请求的,而 nginx 则是将 php 请求转发到了 php-fastcgi 上面。

4856 次点击
所在节点    PHP
31 条回复
iyaozhen
2015-12-18 14:01:44 +08:00
@ben548 这里的并发应该是竞争问题了吧。现在的系统能保证大家都能进来抢东西,但东西只有一个所以要排个队啥的。很可能你排上队了最后还是没有得到
BOYPT
2015-12-18 14:07:29 +08:00
@ben548 因为你这是跟数据库打交道,前面说 apache/nginx 封装处理的,是 tcp 链接到 php 的输出输入部分的并发,至于你的代码去数据里面的并发,当然你自己处理了。
ben548
2015-12-18 14:17:49 +08:00
@BOYPT 恩,理解了,谢谢各位的热心回答
MForever78
2015-12-18 14:35:41 +08:00
@ryd994 是的,这里为了说明主要矛盾忽略了其他的优化和细节。
inevermore
2015-12-18 14:46:30 +08:00
@huhao C 是弱类型,你把强弱和静态动态搞混了。。
neoblackcap
2015-12-18 15:08:07 +08:00
@ryd994 这个还说不上是优点,因为 IPC 其中就有一个说共享内存,这个是线程的优势。大概这是两者的不同吧,不能简单地说优点还是缺点,毕竟有的时候就是需要内存不隔离。
ryd994
2015-12-18 20:20:02 +08:00
@neoblackcap 优点缺点相对的嘛。进程的优点似乎也就剩这个了。
julyclyde
2015-12-18 23:39:22 +08:00
技术话题是很简单明了的
看了 ruanyf 的比喻,我反倒不懂了
neoblackcap
2015-12-18 23:43:45 +08:00
@ryd994 是啊,最直观的感觉就是创建线程的成本更低。其实很多时候是需要看场景的,脱离场景说优缺点,实在没办法。
SoloCompany
2015-12-19 00:14:51 +08:00
仅对于多任务而言,线程和进程的区别基本上可以忽略
最大的区别在于内存管理上的差异

单进程多线程因为有共享内存因而可以有真正意义的 session 以及缓存
但是因为需要访问共享内存,必须考虑锁和并发,程序编写会比较复杂

多进程单线程没有共享内存,所以 session 和缓存都只能依靠外部进程或文件系统
但因为没有共享内存,程序编写不需要考虑锁和并发也更加简单

php 语言本身就不支持多线程,也用不到共享内存,所以两种模型可以说毫无差异
zjqzxc
2015-12-19 10:50:06 +08:00
只说说问题 3 :
nginx+php ; nginx+Apache+php ; apache+php
以上三种方式楼主可以自己搭建然后 ab 命令测试一下; apache 要做相应优化,要不更惨
从左到右性能依次降低

至于为啥楼上已经有人说得很清楚。。我就一句话,同配置下 nginx+php 能承受更大负载。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX