Heim  >  Fragen und Antworten  >  Hauptteil

Parallelität – Wie implementiert das Nginx-Plug-in zeitaufwändige Vorgänge auf nicht blockierende Weise?

Problembeschreibung:

nginx Jeder weiß, dass der Grund für seine großartige Leistung in seiner asynchronen und nicht blockierenden Basis liegt. Daher müssen Sie bei der Entwicklung von Nginx-Plug-Ins zur Verarbeitung von Netzwerkanforderungen daran denken, bestimmte zeitaufwändige Vorgänge auf blockierende Weise auszuführen. Andernfalls wird die Nginx-Leistung ernsthaft beeinträchtigt ...

Es stellt sich die Frage: Was ist, wenn ich einige zeitaufwändige Vorgänge im Plugin ausführen möchte? Zum Beispiel die Datenbank abfragen (die Datenbank unterstützt das HTTP-Protokoll nicht, es gibt ein spezielles Protokoll)?

ps: Ich kann einen Thread-Pool öffnen und diese blockierenden Vorgänge in den Pool werfen, aber gibt es eine Möglichkeit, die aktuelle Anforderungsverarbeitung in der Ereigniswarteschlange des Nginx-Frameworks anzuhalten? Wenn in der Rückruffunktion einer Blockierungsoperation eine Statusänderung gesendet wird, soll Nginx die Verarbeitung der vorherigen Anfrage fortsetzen?

Danke

phpcn_u1582phpcn_u15822734 Tage vor467

Antworte allen(1)Ich werde antworten

  • 迷茫

    迷茫2017-05-16 17:14:26

    数据库查询本质上就是网络通信,本质上只要你socket的read,write都是非阻塞的就没问题。说起来容易实际做起来比较复杂。nginx自身有一些可复用的机制可以实现在http上非阻塞的各种操作。然而像tcp之类的通信,可能并没有现成的。你要自己去写,我感觉比较复杂,而且还要结合在nginx里面。

    Antwort
    0
  • StornierenAntwort