Heim Backend-Entwicklung PHP-Tutorial Multithread-Zeitaktualisierungsmodell in Nginx

Multithread-Zeitaktualisierungsmodell in Nginx

Aug 08, 2016 am 09:31 AM
atomic lock time

In Nginx kann die Funktion ngx_time_update von mehreren Threads ausgeführt werden. Solange jedoch ein Thread diese Funktion ausführt, müssen andere Threads diese Funktion nicht ausführen.

Für diese Anforderung ist der von nginx bereitgestellte Implementierungsplan sehr interessant.

Die ersten beiden Sätze von ngx_time_update lauten wie folgt:

    if (!ngx_trylock(&ngx_time_lock)) {
        return;
    }
    // do something...
    ngx_unlock(&ngx_time_lock);
Nach dem Login kopieren

ngx_trylock und ngx_unlock sind beide Makrodefinitionen und der Code lautet wie folgt:

#define ngx_trylock(lock)  (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
#define ngx_unlock(lock)    *(lock) = 0
Nach dem Login kopieren
Weiter um ngx_atomic_cmp_set zu erweitern

#define ngx_atomic_cmp_set(lock, old, set)                                    \
     ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \
                          == old)
Nach dem Login kopieren

ngx_atomic_uint_t ist der Typalias von unsigned int.

An diesem Punkt ist ersichtlich, dass diese Synchronisierungslösung mithilfe von InterlockedCompareExchange implementiert wird.

Zuallererst kann die Interlocked-Funktionsreihe die Atomizität von Operationen sicherstellen.

Angenommen, der Wert der Variablen ngx_time_lock ist jetzt 0 und zwei Threads müssen die Funktion InterlockedCompareExchange ausführen. Zu diesem Zeitpunkt wird zuerst nur ein Thread ausgeführt, wodurch der Wert von ngx_time_lock auf 1 geändert und 0 zurückgegeben wird. Ein anderer Thread vergleicht den neuen ngx_time_lock-Wert (dh 1) mit 0. Zu diesem Zeitpunkt findet kein Austausch statt und der ursprüngliche Wert 1 wird zurückgegeben, um sicherzustellen, dass dieser Thread bei der if-Beurteilung zurückkehrt.

Darüber hinaus lautet die Typdefinition von ngx_atomic_t: typedef volatile unsigned int ngx_atomic_t;


Das Obige stellt das Multithread-Zeitaktualisierungsmodell in Nginx vor, einschließlich verschiedener Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Monotone Taktverarbeitung des Zeitpakets Monotone Taktverarbeitung des Zeitpakets Aug 04, 2023 pm 05:45 PM

Heute werfen wir hauptsächlich einen Blick auf die Zeitanwendungsmethode des Golang-Zeitpakets. Die allgemeine Regel zwischen den beiden ist, dass „Wandzeit“ zur Angabe der Zeit und „monotone Uhr“ zur Zeitmessung verwendet wird. Es gibt andere Methoden zur Uhrenverarbeitung.

So verwenden Sie Lock in Java-Multithreading So verwenden Sie Lock in Java-Multithreading May 12, 2023 pm 02:46 PM

Nach Jdk1.5 gibt es unter dem Paket java.util.concurrent.locks eine Reihe von Schnittstellen und Klassen für die Thread-Synchronisierung. Wenn es um die Thread-Synchronisierung geht, denkt jeder an das synchronisierte Schlüsselwort, bei dem es sich um ein integriertes Schlüsselwort handelt In Java wird die Thread-Synchronisierung durchgeführt, aber dieses Schlüsselwort weist viele Mängel auf und ist nicht sehr praktisch und intuitiv. Daher werden wir Lock im Folgenden vergleichen und erklären. Wenn wir das synchronisierte Schlüsselwort verwenden, treten normalerweise die folgenden Probleme auf: (1) Unkontrollierbarkeit, es ist nicht möglich, Sperren nach Belieben zu sperren und freizugeben. (2) Die Effizienz ist relativ gering. Beispielsweise lesen wir derzeit zwei Dateien gleichzeitig.

So verwenden Sie die Java8 Time API So verwenden Sie die Java8 Time API Apr 28, 2023 pm 12:25 PM

1. Übersicht Im Rahmen dieses Artikels beginnen wir mit einigen Problemen mit der vorhandenen Date- und CalendarAPI und untersuchen, wie die neue Java8Date- und TimeAPI diese Probleme löst. Wir werfen auch einen Blick auf die Kernklassen in der Java8-Zeitklassenbibliothek, wie LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration und ihre APIs. 2. Das Problem der Thread-Sicherheit der alten API (vor Java 8) – Datums- und Kalenderklassen sind nicht threadsicher, was es für Entwickler schwierig macht, Parallelitätsprobleme dieser APIs zu debuggen und zusätzlichen Code schreiben muss, um damit umzugehen .

Welche Möglichkeiten gibt es, Lock in Java zu verwenden? Welche Möglichkeiten gibt es, Lock in Java zu verwenden? Apr 23, 2023 pm 08:52 PM

1. Funktion (1) Die Lock-Methode zum Erlangen von Sperren unterstützt Unterbrechungen, erwirbt sie nicht nach einer Zeitüberschreitung und ist nicht blockierend (2) Verbessert die Semantik, wo das Sperren und Entsperren ausgeschrieben werden muss (3) Lock-explizite Sperren können uns bringen Kommt mit guter Flexibilität, aber gleichzeitig müssen wir die Sperre manuell aufheben (4) Bedingungsbedingungsobjekt unterstützen (5) Erlauben Sie mehreren Lesethreads gleichzeitig den Zugriff auf gemeinsam genutzte Ressourcen 2. Sperrenverwendung // Holen Sie sich die Sperre voidlock() //Wenn der aktuelle Thread nicht unterbrochen wurde, erwirb die Sperre voidlockInterruptably()//Gib eine neue Bedingungsinstanz zurück, die an diese Sperrinstanz gebunden ist. ConditionnewCondition()//Sperre nur, wenn sie aufgerufen wird

Welche Funktionalität bietet die Java Lock-Klasse? Welche Funktionalität bietet die Java Lock-Klasse? Apr 21, 2023 am 08:16 AM

Hinweis 1. Lock ist eine Schnittstelle im Paket java.util.concurent, die eine Reihe von Sperroperationsmethoden definiert. 2. Die Lock-Schnittstelle umfasst hauptsächlich die Implementierungsklassen ReentrantLock, ReentrantReadWriteLock, ReentrantReadWriteLock und WriteLock. Im Gegensatz zu Synchronized bietet Lock verwandte Schnittstellen wie das Erfassen von Sperren und das Freigeben von Sperren, wodurch die Verwendung flexibler und die Bedienung komplexer wird. InstanceReentrantReadWriteLocklock=newReentrantReadWriteLock();Lockread

Was ist der Unterschied und die Verwendung zwischen Zeit und Datum/Uhrzeit in Python? Was ist der Unterschied und die Verwendung zwischen Zeit und Datum/Uhrzeit in Python? May 02, 2023 am 11:01 AM

1. Zwei Möglichkeiten, Zeit in Python darzustellen: Zeitstempel: Offset in Sekunden relativ zu 1970.1.100:00:00, eindeutiges Zeittupel struct_time: insgesamt 9 Elemente>tm_year: Jahr 1-12> tm_mon: Monat 1-12> tm_mday: Tag 1-31>tm_hour: Stunde 0-23>tm_min: Minute 0-59>tm_sec: Sekunde 0-59>tm_wday: Woche 0-6 (0 bedeutet Sonntag)>tm_day: Tag des Jahres 1-366> tm_isdst: Unabhängig davon, ob Sommerzeit ist, ist der Standardwert -1.ti

So erhalten und konvertieren Sie Zeit im Python-Zeitmodul So erhalten und konvertieren Sie Zeit im Python-Zeitmodul May 13, 2023 pm 12:19 PM

Zeiterfassung und -konvertierung des Pythontime-Moduls Die Zeitbibliothek von Python kann zeitbezogene Verarbeitungen durchführen, z. B. den Zugriff auf das aktuelle Datum und die aktuelle Uhrzeit, die Ausgabe der Zeit in verschiedenen Formaten und das Warten auf eine bestimmte Zeit. 1. Holen Sie sich die Zeit 1.1. Zeitstempel importtimetimestamp=time.time()#1682737552.5009851 Greenwich Mean Time (GMT) Die Gesamtzahl der Sekunden von 00:00:00 Uhr am 1. Januar 1970 bis zur Gegenwart 1.2. Strukturierte Zeit importtimestruct_time= time. localtime()#time.struct_time(tm_year=2

Warum müssen Sie Lock in Java bereitstellen, anstatt nur das synchronisierte Schlüsselwort zu verwenden? Warum müssen Sie Lock in Java bereitstellen, anstatt nur das synchronisierte Schlüsselwort zu verwenden? Apr 20, 2023 pm 05:01 PM

Zusammenfassung: Das synchronisierte Schlüsselwort wird in Java bereitgestellt, um sicherzustellen, dass nur ein Thread auf den synchronisierten Codeblock zugreifen kann. Warum wird die Lock-Schnittstelle auch im Java SDK-Paket bereitgestellt, da das synchronisierte Schlüsselwort bereitgestellt wurde? Ist das eine unnötige Neuerfindung des Rades? Heute werden wir dieses Thema gemeinsam besprechen. Das synchronisierte Schlüsselwort wird in Java bereitgestellt, um sicherzustellen, dass nur ein Thread auf den synchronisierten Codeblock zugreifen kann. Warum wird die Lock-Schnittstelle auch im Java SDK-Paket bereitgestellt, da das synchronisierte Schlüsselwort bereitgestellt wurde? Ist das eine unnötige Neuerfindung des Rades? Lassen Sie uns heute gemeinsam darüber diskutieren

See all articles