nginx 处理并发请求时通过多个 worker (多进程)实现的,每个 worker 会去启动一个 wsgi app,各个 worker 启动的 wsgi app 之间 GIL 是独立的,不会相互锁住。所以多核情况下,并发请求是可以并行(同一时刻,不同的核跑不同的 web app 实例)处理的
以上是我的猜想,有没有大佬来证实一下,或者指正一下
1
zjsxwc 2019-12-21 15:06:00 +08:00
1. 你漏掉了 wsgi server 比如那个叫 uwsgi 的东西,其实就是 java 里 tomcat、php 里 fpm 一样的东西
2. 在软件工程里没有并行这个用语我们统一都叫“并发” |
3
zjsxwc 2019-12-21 15:30:00 +08:00 via Android
@ljpCN #2 原文:“@zjsxwc 第一次听说软件工程里没有并行这个用语。。楼上能解释一下吗”
回复: 并行是运行时出现的,他不但受到硬件影响,比如同一台计算机里不同进程、网络中不同计算机里不同进程,最主要的还受到上下文环境影响,比如在代码层面一个进程中你上面 10 行与下面 10 行的执行也是认为并行,即使存在先后顺序,所以夸张的说一切皆是并行,这毫无意义。 |
4
no1xsyzy 2019-12-21 15:43:29 +08:00
@zjsxwc 不是软工不谈并行,是 Web 软工不谈并行,况且并行是 “底层细节” 而不是 “上层表现”,去控制它没意义。
真的并行就是 CPU 密集才需要重点考虑。 |
5
zjsxwc 2019-12-21 15:48:14 +08:00
@no1xsyzy
简单点说,除了 verilog、vhld 这种硬件设计语言, 软件工程中我们写的代码都是只考虑处理并发,而不考虑并行的,几十年前单核心的 cpu 上照样能跑的代码肯定是物理上不并行,行为上能处理并发的 |
6
rogwan 2019-12-21 15:50:31 +08:00 via iPhone
是的,一般 Python 用 uwsgi 或 gunicorn 这类工具实现多进程,就不存在 gil 锁的问题了
|