nginx + Python 多进程的疑惑

2019-12-21 14:57:30 +08:00
 leosirius666a

nginx 处理并发请求时通过多个 worker (多进程)实现的,每个 worker 会去启动一个 wsgi app,各个 worker 启动的 wsgi app 之间 GIL 是独立的,不会相互锁住。所以多核情况下,并发请求是可以并行(同一时刻,不同的核跑不同的 web app 实例)处理的

以上是我的猜想,有没有大佬来证实一下,或者指正一下

1991 次点击
所在节点    程序员
6 条回复
zjsxwc
2019-12-21 15:06:00 +08:00
1. 你漏掉了 wsgi server 比如那个叫 uwsgi 的东西,其实就是 java 里 tomcat、php 里 fpm 一样的东西
2. 在软件工程里没有并行这个用语我们统一都叫“并发”
ljpCN
2019-12-21 15:21:18 +08:00
@zjsxwc 第一次听说软件工程里没有并行这个用语。。楼上能解释一下吗
zjsxwc
2019-12-21 15:30:00 +08:00
@ljpCN #2 原文:“@zjsxwc 第一次听说软件工程里没有并行这个用语。。楼上能解释一下吗”
回复:

并行是运行时出现的,他不但受到硬件影响,比如同一台计算机里不同进程、网络中不同计算机里不同进程,最主要的还受到上下文环境影响,比如在代码层面一个进程中你上面 10 行与下面 10 行的执行也是认为并行,即使存在先后顺序,所以夸张的说一切皆是并行,这毫无意义。
no1xsyzy
2019-12-21 15:43:29 +08:00
@zjsxwc 不是软工不谈并行,是 Web 软工不谈并行,况且并行是 “底层细节” 而不是 “上层表现”,去控制它没意义。
真的并行就是 CPU 密集才需要重点考虑。
zjsxwc
2019-12-21 15:48:14 +08:00
@no1xsyzy
简单点说,除了 verilog、vhld 这种硬件设计语言,
软件工程中我们写的代码都是只考虑处理并发,而不考虑并行的,几十年前单核心的 cpu 上照样能跑的代码肯定是物理上不并行,行为上能处理并发的
rogwan
2019-12-21 15:50:31 +08:00
是的,一般 Python 用 uwsgi 或 gunicorn 这类工具实现多进程,就不存在 gil 锁的问题了

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

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

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

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

© 2021 V2EX