Maison développement back-end tutoriel php nginx中的多线程时间更新模型

nginx中的多线程时间更新模型

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

在nginx中,ngx_time_update函数可以被多个线程执行,但只要有一个线程执行了这个函数,其他线程无需执行这个函数。

对于这种需求,nginx给出的实现方案挺有意思。

ngx_time_update开头两句如下:

    if (!ngx_trylock(&ngx_time_lock)) {
        return;
    }
    // do something...
    ngx_unlock(&ngx_time_lock);
Copier après la connexion

ngx_trylock和ngx_unlock都是宏定义,代码如下:

#define ngx_trylock(lock)  (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
#define ngx_unlock(lock)    *(lock) = 0
Copier après la connexion
继续展开ngx_atomic_cmp_set

#define ngx_atomic_cmp_set(lock, old, set)                                    \
     ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \
                          == old)
Copier après la connexion

ngx_atomic_uint_t是unsigned int的类型别名。

至此,可以看出这种同步方案是使用InterlockedCompareExchange实现的。

首先,Interlocked系列函数能够保证操作的原子性。

假设现在ngx_time_lock变量的值为0,有两个线程都要执行InterlockedCompareExchange这个函数了。此时,只会有一个线程先执行,它改变了ngx_time_lock的值为1,并返回0。另外一个线程用新的ngx_time_lock值(也就是1)跟0进行比较,此时,不会发生交换,并且返回原始的值1,保证这个线程在if判断处返回。

另外,ngx_atomic_t的类型定义为:typedef volatile unsigned int ngx_atomic_t;


以上就介绍了nginx中的多线程时间更新模型,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Traitement d'horloge monotone du paquet de temps Traitement d'horloge monotone du paquet de temps Aug 04, 2023 pm 05:45 PM

Aujourd'hui, nous allons principalement examiner la méthode d'application du temps du package Golang Time. La règle générale entre les deux est que « l'heure murale » est utilisée pour indiquer l'heure et « l'horloge monotone » est utilisée pour mesurer le temps. Il existe d'autres méthodes de traitement d'horloge ;

Comment utiliser Lock dans le multithreading Java Comment utiliser Lock dans le multithreading Java May 12, 2023 pm 02:46 PM

Après Jdk1.5, sous le package java.util.concurrent.locks, il existe un ensemble d'interfaces et de classes qui implémentent la synchronisation des threads. En matière de synchronisation des threads, tout le monde peut penser au mot-clé synchronisé, qui est un mot-clé intégré. mot-clé en Java. Il gère la synchronisation des threads, mais ce mot-clé présente de nombreux défauts et n'est pas très pratique et intuitif à utiliser, donc Lock apparaît ci-dessous, nous allons comparer et expliquer Lock. Habituellement, lorsque nous utilisons le mot-clé synchronisé, nous rencontrerons les problèmes suivants : (1) Incontrôlabilité, impossible de verrouiller et de déverrouiller les verrous à volonté. (2) L'efficacité est relativement faible. Par exemple, nous lisons actuellement deux fichiers simultanément.

Comment utiliser l'API Java8 Time Comment utiliser l'API Java8 Time Apr 28, 2023 pm 12:25 PM

1. Présentation Dans le cadre de cet article, commençons par quelques problèmes avec les API Date et Calendar existantes et explorons comment les nouvelles API Java8Date et Time résolvent ces problèmes. Nous examinerons également les classes principales de la bibliothèque de classes de temps Java8, telles que LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration et leurs API. 2. Problèmes avec la sécurité des threads de l'ancienne API (avant Java 8) - les classes Date et Calendar ne sont pas thread-safe, ce qui rend difficile pour les développeurs de déboguer les problèmes de concurrence avec ces API et doivent écrire du code supplémentaire pour les gérer. .

Quelles sont les manières d'utiliser Lock en Java ? Quelles sont les manières d'utiliser Lock en Java ? Apr 23, 2023 pm 08:52 PM

1. Fonction (1) La méthode Lock pour acquérir des verrous prend en charge l'interruption, aucune acquisition après un délai d'attente et n'est pas bloquante (2) Elle améliore la sémantique. L'endroit où verrouiller et déverrouiller doit être écrit (3) Le verrouillage explicite du verrou peut nous apporter. Livré avec une bonne flexibilité, mais en même temps, nous devons libérer manuellement le verrou (4) Objet de condition de condition de support (5) Autoriser plusieurs threads de lecture à accéder aux ressources partagées en même temps 2. Utilisation du verrouillage //Obtenir le verrou voidlock() //Si le thread actuel n'a pas été interrompu, acquérir le verrou voidlockInterruptably()//Renvoyer une nouvelle instance de Condition liée à cette instance de Lock ConditionnewCondition()//Lock uniquement lorsqu'il est appelé

Quelles fonctionnalités la classe Java Lock fournit-elle ? Quelles fonctionnalités la classe Java Lock fournit-elle ? Apr 21, 2023 am 08:16 AM

Remarque 1. Lock est une interface du package java.util.concurent, qui définit une série de méthodes d'opération de verrouillage. 2. L'interface Lock comprend principalement les classes d'implémentation ReentrantLock, ReentrantReadWriteLock, ReentrantReadWriteLock et WriteLock. Différent de Synchronized, Lock fournit des interfaces associées telles que l'acquisition et la libération de verrous, ce qui le rend plus flexible à utiliser et plus complexe à utiliser. InstanceReentrantReadWriteLocklock=newReentrantReadWriteLock();Lockread

Quelle est la différence et l'utilisation entre time et datetime en python Quelle est la différence et l'utilisation entre time et datetime en python May 02, 2023 am 11:01 AM

1. Deux façons de représenter l'heure en Python : timestamp : décalage en secondes par rapport à 1970.1.100:00:00, tuple temporel unique struct_time : un total de 9 éléments>tm_year : année 1-12> tm_mon : mois 1-12> tm_mday : jour 1-31>tm_hour : heure 0-23>tm_min : minute 0-59>tm_sec : seconde 0-59>tm_wday : semaine 0-6 (0 signifie dimanche)>tm_day : jour de l'année 1-366> tm_isdst : qu'il s'agisse de l'heure d'été, la valeur par défaut est -1.ti

Comment obtenir et convertir l'heure dans le module de temps Python Comment obtenir et convertir l'heure dans le module de temps Python May 13, 2023 pm 12:19 PM

Acquisition et conversion de l'heure du module Pythontime La bibliothèque Time de Python peut effectuer des traitements liés au temps, tels que l'accès à la date et à l'heure actuelles, la sortie de l'heure dans différents formats et l'attente d'une heure spécifiée. 1. Obtenez l'heure 1.1. Horodatage importtimetimestamp=time.time()#1682737552.5009851 Heure moyenne de Greenwich (GMT) Le nombre total de secondes entre 00:00:00 le 1er janvier 1970 et aujourd'hui 1.2. localtime()#time.struct_time(tm_year=2

Pourquoi Java doit-il fournir Lock au lieu d'utiliser simplement le mot-clé synchronisé ? Pourquoi Java doit-il fournir Lock au lieu d'utiliser simplement le mot-clé synchronisé ? Apr 20, 2023 pm 05:01 PM

Résumé : Le mot clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, nous discuterons ensemble de cette question. Le mot-clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, parlons-en ensemble

See all articles