ホームページ バックエンド開発 PHPチュートリアル nginx のマルチスレッド時間更新モデル

nginx のマルチスレッド時間更新モデル

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

nginxでは、ngx_time_update関数を複数のスレッドで実行することができますが、1つのスレッドがこの関数を実行すれば、他のスレッドがこの関数を実行する必要はありません。

この要件に関して、nginx が提供する実装計画は非常に興味深いものです。

ngx_time_update の最初の 2 つの文は次のとおりです:

    if (!ngx_trylock(&ngx_time_lock)) {
        return;
    }
    // do something...
    ngx_unlock(&ngx_time_lock);
ログイン後にコピー

ngx_trylock と ngx_unlock は両方ともマクロ定義であり、コードは次のとおりです:

#define ngx_trylock(lock)  (*(lock) == 0 && ngx_atomic_cmp_set(lock, 0, 1))
#define ngx_unlock(lock)    *(lock) = 0
ログイン後にコピー
は ngx_atomic_cmp_set を展開し続けます

#define ngx_atomic_cmp_set(lock, old, set)                                    \
     ((ngx_atomic_uint_t) InterlockedCompareExchange((long *) lock, set, old) \
                          == old)
ログイン後にコピー

ngx_atomic_uint_t はタイプのエイリアスです符号なし整数の。

この時点で、この同期ソリューションは InterlockedCompareExchange を使用して実装されていることがわかります。

まず第一に、Interlocked 一連の関数は操作のアトミック性を保証できます。

ngx_time_lock 変数の値が 0 になり、2 つのスレッドが InterlockedCompareExchange 関数を実行する必要があると仮定します。現時点では、1 つのスレッドのみが最初に実行され、ngx_time_lock の値が 1 に変更され、0 が返されます。別のスレッドは、新しい ngx_time_lock 値 (つまり 1) と 0 を比較します。このとき、交換は行われず、元の値 1 が返されるため、このスレッドは if 判定で確実に戻ります。

さらに、ngx_atomic_t の型定義は次のとおりです: typedef volatile unsigned int ngx_atomic_t;


上記では、nginx のマルチスレッド時間更新モデルをその側面も含めて紹介していますが、PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

タイムパッケージの単調クロック処理 タイムパッケージの単調クロック処理 Aug 04, 2023 pm 05:45 PM

今日は主に golang time パッケージの時間適用方法を見ていきます。この 2 つの間の一般的なルールは、時間を伝えるために「ウォールタイム」が使用され、時間を測定するために「モノトニッククロック」が使用されるということですが、他のクロック処理方法もあります。

JavaマルチスレッドでLockを使用する方法 JavaマルチスレッドでLockを使用する方法 May 12, 2023 pm 02:46 PM

Jdk1.5 以降では、java.util.concurrent.locks パッケージの下に、スレッド同期用のインターフェイスとクラスのセットが存在します。スレッド同期に関して言えば、組み込みキーワードである synchronized キーワードを誰もが思い浮かべるかもしれません。 Java ではスレッドの同期を処理しますが、このキーワードには多くの欠陥があり、利便性や直感的に使用することが難しいため、Lock が表示されます。通常、synchronized キーワードを使用すると、次の問題が発生します。 (1) 制御不能、自由にロックしたりロックを解放したりできない。 (2) 効率は比較的低く、たとえば、現在 2 つのファイルを同時に読み取っています。

Java8 Time APIの使い方 Java8 Time APIの使い方 Apr 28, 2023 pm 12:25 PM

1. 概要 この記事の一部として、既存の Date および CalendarAPI に関するいくつかの問題から始めて、新しい Java8Date および TimeAPI がこれらの問題をどのように解決するかを探ってみましょう。また、LocalDate、LocalTime、LocalDateTime、ZonedDateTime、Period、Duration などの Java8 時間クラス ライブラリのコア クラスとその API についても見ていきます。 2. 古い API (Java 8 以前) のスレッド セーフの問題 - Date クラスと Calendar クラスはスレッド セーフではないため、開発者がこれらの API の同時実行性の問題をデバッグすることが困難であり、それらに対処するために追加のコードを記述する必要があります。 。

JavaでLockを使用するにはどのような方法がありますか? JavaでLockを使用するにはどのような方法がありますか? Apr 23, 2023 pm 08:52 PM

1. 機能 (1) ロックを取得する Lock メソッドは、割り込みをサポートし、タイムアウト後の取得なし、ノンブロッキング (2) セマンティクスを改善します。どこでロックおよびロックを解除するかを書き出す必要があります (3) ロックの明示的なロックにより、次のことが可能になります。優れた柔軟性を備えていますが、同時にロックを手動で解放する必要があります (4) サポート条件条件オブジェクト (5) 複数の読み取りスレッドが同時に共有リソースにアクセスできるようにします 2. ロックの使用法 // ロックを取得 voidlock() //現在のスレッドがロックを取得していない場合、中断された場合、ロックを取得します voidlockInterruptibly()//この Lock インスタンスにバインドされた新しい Condition インスタンスを返します ConditionnewCondition()//呼び出されたときのみロックします

Java Lock クラスはどのような機能を提供しますか? Java Lock クラスはどのような機能を提供しますか? Apr 21, 2023 am 08:16 AM

注1. Lockはjava.util.concurentパッケージ配下のインタフェースであり、一連のロック操作メソッドを定義しています。 2. Lock インターフェイスには、主に ReentrantLock、ReentrantReadWriteLock、ReentrantReadWriteLock、および WriteLock 実装クラスが含まれます。 Synchronized とは異なり、Lock はロックの取得やロックの解放などの関連インターフェイスを提供するため、より柔軟に使用でき、より複雑な操作が可能になります。 InstanceReentrantReadWriteLocklock=newReentrantReadWriteLock();Lockread

Pythonの時刻と日時の違いと使用法は何ですか Pythonの時刻と日時の違いと使用法は何ですか May 02, 2023 am 11:01 AM

1. Python で時刻を表す 2 つの方法: timestamp: 1970.1.100:00:00 を基準とした秒単位のオフセット、一意の時刻タプル struct_time: 合計 9 要素>tm_year: year 1-12> tm_mon: month 1-12> tm_mday: 日 1 ~ 31>tm_hour: 時 0 ~ 23>tm_min: 分 0 ~ 59>tm_sec: 秒 0 ~ 59>tm_wday: 週 0 ~ 6 (0 は日曜日を意味します)>tm_day: 年間の日 1 ~ 366> tm_isdst: 夏時間であるかどうか、デフォルトは -1.ti

Python timeモジュールで時間を取得および変換する方法 Python timeモジュールで時間を取得および変換する方法 May 13, 2023 pm 12:19 PM

Pythontime モジュールの時間の取得と変換 Python の Time ライブラリでは、現在の日付と時刻へのアクセス、さまざまな形式での時刻の出力、指定された時刻の待機など、時間関連の処理を実行できます。 1. 時刻の取得 1.1. タイムスタンプ importtimetimestamp=time.time()#1682737552.5009851 グリニッジ標準時 (GMT) 1970 年 1 月 1 日の 00:00:00 から現在までの合計秒数 1.2. 構造化時間 importtimestruct_time= time。 localtime()#time.struct_time(tm_year=2

Java では、synchronized キーワードを使用するだけでなく、Lock を提供する必要があるのはなぜですか? Java では、synchronized キーワードを使用するだけでなく、Lock を提供する必要があるのはなぜですか? Apr 20, 2023 pm 05:01 PM

概要: synchronized キーワードは、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにするために Java で提供されています。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日はこの問題について一緒に話し合います。 Java では synchronized キーワードが提供され、1 つのスレッドのみが同期されたコード ブロックにアクセスできるようにします。 synchronized キーワードが提供されているのに、なぜ Lock インターフェースも Java SDK パッケージで提供されるのですか?これは不必要な車輪の再発明でしょうか?今日は一緒にそれについて話し合いましょう

See all articles