왜 레디 스하는 단일 스레드, 왜 빠릅니다.

저장에서 레디 스 5
  문자열,리스트, 세트, 해시, ZSET 이 다섯 가지를


데이터베이스의 작업의 저장 모드에 따라로 나눌 수 있습니다 :

  하드 디스크 데이터베이스와 메모리 데이터베이스. 판독 데이터가 하드 디스크 I / O 속도에 의해 제한되지 않는 경우 레디 스 너무 빨리, 내부 메모리에 데이터를 저장하는 단계를 포함한다. 레디 스는 메모리 기반 데이터베이스를 C 언어로 기술 한 KV 단일 스레드 프로세스 모델 공식 데이터 QPS 100000 +의 (초당 질의의 수)를 얻을 수에 이용한다.

 

그래서 레디 스는 왜 단일 스레드입니까?
  레디 스 메모리 조작은 병목 현상, CPU 레디 스 아니라, 대부분 레디 스 병목 시스템 메모리 크기 또는 대역폭을 기반으로하기 때문에. 쉽게 구현할 단일 스레드, 그리고 CPU가 병목이되지 않기 때문에, (결국, 멀티 스레딩의 사용이 많은 문제가 될 것입니다!) 단일 스레드 프로그램을 채택하는 것이 논리적이다.

그러나, 우리는 단일 스레드 멀티 코어 CPU의 성능을 사용하는 방법은 재생할 수 없습니다, 그러나 우리는 완벽에 하나의 레디 스의 여러 인스턴스를 열 수 있습니다!

참고 :
  여기에 우리가 단일 스레드 강조되었지만, 시간이 정식 레디 스 서버를 실행 확실히 큰 가족이 명확한 메모를 필요로 하나 개 이상의 스레드, 때 과정에서 하나의 스레드 만이 우리의 네트워크 요청을 처리하기 위해! 예를 들어, 레디 스 지속성 방식 자식 또는 자식 스레드가 실행될 때. (공상 기사 지속성)

 

빠른 이유 :

  1, 전체 메모리를 기반으로, 대부분의 요청은 매우 빠르고, 순수 메모리 작업입니다. HashMap의 유사한 메모리에 저장된 데이터 HashMap의 장점은 룩업 연산 시간과 복잡도 O된다 (1);

  (2) 단순한 데이터 구조, 데이터 조작은 레디 스 데이터 구조가 호환 될 수 있도록 설계되어, 간단;

  3, 단일 스레드, 불필요한 콘텍스트 스위치 및 경쟁 상태를 피하기가 멀티 프로세스 또는 멀티 스레드 스위칭 리드 CPU 소비 아니는 로크 다양한 문제를 고려하지 않아도가없고, 로크 동작을 해제 할 잠금 없다 성능의 소비에 의한 교착 가능성 때문에;

  네, 여러 I / O 멀티플렉싱 모델, 입출력 블로킹의 사용;

  기본이되는 구현 방법 사이 그와 클라이언트 간의 통신을 위해 서로 다른 기본 모델, 응용 프로그램 프로토콜을 사용하여 5, 시스템 호출 시스템 기능의 대부분은, 그것은 이동하는 시간을 낭비하기 때문에 레디 스 VM는, 자신의 직접적인 메커니즘을 구축, 동일하지 않습니다 및 요청.

 

NIO 다중 모델 :

  다중 I / O 멀티플렉싱 모델은 내가 가진 하나 개 이상의 스트림이있는 경우,는 epoll 기능을 동시에, 현재의 thread가 봉쇄 것, 자신의 여가 시간에, 다중 스트림의 I / O 이벤트를 모니터링 할 수 있습니다 선택, 설문 조사의 사용이다 시 / O 이벤트,이 방법을가 차단 상태에서 깨어, 그래서 프로그램은 다시 모든 스트림을 (epoll에 정말 이벤트의 스트림을 전송하는 유일한 여론 조사입니다) 폴링, 그 과정만을 준비 순차적 흐름 그것은 쓸모없는 작업을 많이 방지 할 수 있습니다.

여기서 "다중화"는 다수의 네트워크 연결을 의미한다 "다중화"는 동일한 스레드를 다시 지칭한다.

멀티 채널 I / O를 다중화 기법은 메모리 내에 "단일 스레드 연결 요청하는 복수의 처리 효율"(시간을 소비 네트워크 IO을 최소화하기 위해), 및 동작 속도 메모리 레디 스 데이터가 매우 빠르고 허용 작업은 주로 레디 스 매우 높은 처리량을 만들었습니다 위의 포인트, 병목 레디 스 성능이되지 않습니다.

 

확장 :
1, 단일 공정 다중 스레드 모델 : MySQL은, Memcached가 오라클 (Windows 버전)

2, 멀티 프로세스 모델 : 오라클 (리눅스 버전)

추천

출처www.cnblogs.com/hacker-lsr/p/11787209.html