nginx のマルチスレッド時間更新モデル
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
#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 チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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