nginx 소스 코드 분석 1 - 프로 세 스 간 통신 메커니즘 2 (자동 잠 금)
3115 단어 nginx
자전 자물쇠
자 회전 자물쇠 와 다른 자물쇠 의 가장 큰 차 이 는 자 회전 자물쇠 가 호출 자의 수면 (비 수면 자물쇠) 을 일 으 키 지 않 는 다 는 것 이다. 즉, 시종 실행 가능 한 상태 이다.만약 자선 자물쇠 가 다른 실행 단원 에 의 해 유지 되 었 다 면, 호출 자 는 계속 그곳 에서 순환 해서, 자선 자물쇠 의 보유 자가 이미 자 물 쇠 를 풀 었 는 지 확인 해 야 한다.
자동 잠 금 적용 필드
자물쇠 의 사용 시간 이 매우 짧 을 때 자전 자 물 쇠 를 사용 할 수 있어 서 비용 이 매우 적다.시간 이 오래 걸 리 면 자물쇠 가 계속 자전 하고 다른 프로그램 을 예약 할 수 없 으 며 cpu 자원 이 대량으로 점용 되 어 적합 하지 않 습 니 다.장시간 의 자 물 쇠 는 자전 이 아니 라 휴면 시 키 는 자 물 쇠 를 사용 해 야 한다.자전 자 물 쇠 는 단 핵 이 든 다 핵 이 든 모두 효과 적 이 고 실행 가능 한 상태 에 있 으 며 상태 전환 이 적 을 수 있 습 니 다. 수면 상태 로 전환 하려 면 휴면 상태 에서 준비 상태 로 전환 해 야 cpu 스케줄 링 을 할 수 있 습 니 다 (잘 모 르 면 운영 체제 프로세서 스케줄 링 에 관 한 지식 을 많이 알 아야 합 니 다).
nginx 관련 실현
void
ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin)
{
//
#if (NGX_HAVE_ATOMIC_OPS)
ngx_uint_t i, n;
for ( ;; ) {
// , (compare and set)
if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
// return。
return;
}
// cpu 1
if (ngx_ncpu > 1) {
// for n nginx_cpu_pause 。
for (n = 1; n < spin; n <<= 1) {
for (i = 0; i < n; i++) {
// , CPU , CPU , 。 。
ngx_cpu_pause();
}
// , , spin , 。
if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
return;
}
}
}
// for usleep(1)
ngx_sched_yield();
}
#else
#if (NGX_THREADS)
#error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !
#endif
#endif
}
nginx 가 다 핵 과 단 핵 을 충분히 이용 한 장면 을 볼 수 있 습 니 다. 안의 이중 for 순환 도 넓 고 심오 하 며 나머지 디 테 일 도 특히 치밀 합 니 다.자전 자 물 쇠 는 짧 은 시간 에 잠 그 는 것 이 매우 효율 적 이 고 유용 하 다.섬세 한 당신, ngx 에서 발견 할 수 있 을 겁 니 다.shmtx_lock 방법 에서 도 자 회전 자물쇠 와 신 호 량 을 함께 하 는 방식 으로 이 루어 졌 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.