• 请不要在回答技术问题时复制粘贴 AI 生成的内容
leosirius666a
V2EX  ›  程序员

nginx + Python 多进程的疑惑

  •  
  •   leosirius666a · Dec 21, 2019 · 2621 views
    This topic created in 2360 days ago, the information mentioned may be changed or developed.

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

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

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

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