Multithread-Zeitaktualisierungsmodell in Nginx
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);
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
#define ngx_atomic_cmp_set(lock, old, set) \ ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \ == old)
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.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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.

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 .

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

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

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

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

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
