nginx의 멀티스레드 시간 업데이트 모델
nginx에서는 ngx_time_update 함수가 여러 스레드에 의해 실행될 수 있지만, 하나의 스레드가 이 함수를 실행하는 한 다른 스레드는 이 함수를 실행할 필요가 없습니다.
이러한 요구 사항에 대해 nginx에서 제공하는 구현 계획은 매우 흥미롭습니다.
ngx_time_update의 처음 두 문장은 다음과 같습니다.
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는 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 휘발성 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 Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











오늘은 golang time 패키지의 시간 적용 방법을 주로 살펴보겠습니다. 둘 사이의 일반적인 규칙은 "벽 시간"이 시간을 알려주는 데 사용되고 "단조 시계"가 시간을 측정하는 데 사용된다는 것입니다. 다른 시계 처리 방법이 있습니다.

Jdk1.5 이후에는 java.util.concurrent.locks 패키지 아래에 스레드 동기화를 구현하는 일련의 인터페이스와 클래스가 있습니다. 스레드 동기화에 관해서라면 누구나 내장된 동기화 키워드를 생각할 수 있습니다. Java의 키워드입니다. 스레드 동기화를 처리하지만 이 키워드는 결함이 많고 사용하기가 매우 편리하지 않으므로 아래에서 Lock을 비교하여 설명하겠습니다. 일반적으로 동기화 키워드를 사용할 때 다음과 같은 문제에 직면하게 됩니다. (1) 통제 불가능성, 잠금을 마음대로 잠그거나 해제할 수 없습니다. (2) 효율성이 상대적으로 낮습니다. 예를 들어 현재 두 개의 파일을 동시에 읽고 있습니다.

1. 개요 이 기사의 일부로 기존 Date 및 CalendarAPI의 몇 가지 문제부터 시작하여 새로운 Java8Date 및 TimeAPI가 이러한 문제를 어떻게 해결하는지 살펴보겠습니다. 또한 LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration 및 해당 API와 같은 Java8 시간 클래스 라이브러리의 핵심 클래스를 살펴보겠습니다. 2. 이전 API(Java 8 이전)의 스레드 안전성 문제 - 날짜 및 달력 클래스는 스레드로부터 안전하지 않으므로 개발자가 이러한 API의 동시성 문제를 디버그하기 어렵고 이를 처리하기 위해 추가 코드를 작성해야 합니다. .

1. 기능 (1) 잠금을 획득하는 잠금 방법은 중단을 지원하고 시간 초과 후 획득하지 않으며 비차단입니다. (2) 잠금 및 잠금 해제 위치를 기록해야 하는 의미를 개선합니다. (3) 잠금 명시적 잠금은 우리를 가져올 수 있습니다. 유연성이 뛰어나지만 동시에 잠금을 수동으로 해제해야 합니다. (4) 지원 조건 조건 개체 (5) 여러 읽기 스레드가 동시에 공유 리소스에 액세스하도록 허용합니다. 2.lock 사용법 //Get the lock voidlock() //현재 스레드가 인터럽트되지 않은 경우 잠금을 획득합니다. voidlockInterruptously()//이 잠금 인스턴스에 바인딩된 새 Condition 인스턴스를 반환합니다 ConditionnewCondition()//호출될 때만 잠금

참고 1. Lock은 일련의 잠금 작업 방법을 정의하는 java.util.concurent 패키지의 인터페이스입니다. 2. Lock 인터페이스에는 주로 ReentrantLock, ReentrantReadWriteLock, ReentrantReadWriteLock 및 WriteLock 구현 클래스가 포함됩니다. 동기화와 달리 잠금은 잠금 획득 및 잠금 해제와 같은 관련 인터페이스를 제공하므로 사용이 더 유연하고 작동이 더 복잡합니다. InstanceReentrantReadWriteLocklock=newReentrantReadWriteLock();잠금 읽기

1. Python에서 시간을 표현하는 두 가지 방법: 타임스탬프: 1970.1.100:00:00을 기준으로 한 초 단위 오프셋, 고유 시간 튜플 struct_time: 총 9개 요소>tm_year: 1-12년> tm_mon: 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. 현지시간()#time.struct_time(tm_year=2

요약: 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘 우리는 이 문제에 대해 함께 논의해 보겠습니다. 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘은 함께 토론해보자
