V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leosirius666a
V2EX  ›  程序员

nginx + Python 多进程的疑惑

  •  
  •   leosirius666a · 2019-12-21 14:57:30 +08:00 · 2077 次点击
    这是一个创建于 1800 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    并行是运行时出现的,他不但受到硬件影响,比如同一台计算机里不同进程、网络中不同计算机里不同进程,最主要的还受到上下文环境影响,比如在代码层面一个进程中你上面 10 行与下面 10 行的执行也是认为并行,即使存在先后顺序,所以夸张的说一切皆是并行,这毫无意义。
    no1xsyzy
        4
    no1xsyzy  
       2019-12-21 15:43:29 +08:00
    @zjsxwc 不是软工不谈并行,是 Web 软工不谈并行,况且并行是 “底层细节” 而不是 “上层表现”,去控制它没意义。
    真的并行就是 CPU 密集才需要重点考虑。
    zjsxwc
        5
    zjsxwc  
       2019-12-21 15:48:14 +08:00
    @no1xsyzy
    简单点说,除了 verilog、vhld 这种硬件设计语言,
    软件工程中我们写的代码都是只考虑处理并发,而不考虑并行的,几十年前单核心的 cpu 上照样能跑的代码肯定是物理上不并行,行为上能处理并发的
    rogwan
        6
    rogwan  
       2019-12-21 15:50:31 +08:00 via iPhone
    是的,一般 Python 用 uwsgi 或 gunicorn 这类工具实现多进程,就不存在 gil 锁的问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:46 · PVG 22:46 · LAX 06:46 · JFK 09:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.