이 기사에서는 Redis의 단일 스레드 리액터 모델, I/O 모델 및 다중 스레드 I/O 모델에 대해 설명하겠습니다.
redis의 고성능
- 순수한 메모리 액세스, 모든 데이터는 메모리에 있고 모든 작업은 메모리 수준 작업이며 메모리 응답 시간은 나노초 수준입니다. 따라서 Redis 프로세스의 CPU에는 기본적으로 디스크 I/O 대기 시간과 메모리 읽기 및 쓰기 성능 문제가 없습니다. CPU는 Redis의 병목 현상이 아닙니다(메모리 크기와 네트워크 I/O는 Redis의 병목 현상입니다. , 클라이언트와 서버 사이의 네트워크 전송 지연). [관련 권장사항: Redis 동영상 튜토리얼]
- 은 단일 스레드 모델을 채택하고 있으며 단일 스레드 구현이 간단합니다. 다중 스레드의 빈번한 컨텍스트 전환 및 잠금과 같은 동기화 메커니즘으로 인해 발생하는 오버헤드를 방지합니다. 간단하고 효율적인 기본 데이터 구조: 동적 문자열(SDS), 연결된 목록, 사전, 점프 연결된 목록, 정수 세트 및 압축 목록. 그런 다음 Redis는 이 기반을 사용하여 사용자가 조작할 수 있는 개체(문자열, 목록, 해시, 집합, 순서 집합 및 기타 개체)
- 리액터 모드 네트워크 이벤트 프로세서를 구현합니다. I/O 멀티플렉싱을 사용하여 여러 소켓을 동시에 모니터링하는 효율적인 I/O 모델입니다. 리액터 관련 지식은 다음 기사를 읽어보세요
프레임워크 기사: Linux 고성능 네트워크 IO+Reactor 모델 보기
단일 스레드를 사용하는 이유
단일 스레드를 사용하여 불필요한 컨텍스트 전환 및 경쟁 조건을 방지하세요 ; 멀티스레딩으로 인한 전환으로 인한 CPU 소모가 없습니다
- 다양한 잠금 문제를 고려할 필요가 없고, 잠금 및 해제 작업도 없으며, 교착 상태로 인한 성능 소모도 없습니다
- 간단하고 유지 관리가 가능한 멀티 스레드 모드는 프로그램 작성을 더 복잡하고 번거롭게 만듭니다. 단일 스레드 구현은 구현하기 쉽습니다.
-
redis는 단일 스레드 시스템인가요?
네트워크 이벤트 처리 모델 리액터가 단일 스레드이기 때문에 Redis가 단일 스레드라고 자주 말합니다.
- 클라이언트 요청이 수백만 개의 키 값을 삭제하는 경우 이 명령으로 차단이 발생할 수 있습니다. Redis 4.0에서는 이러한 유형의 비차단 명령을 구현하기 위해 멀티스레딩을 도입하기로 결정했습니다
- Redis 6.0 버전에서는 클라이언트의 I/O 읽기 및 쓰기 응답을 처리하기 위해 멀티스레딩이 공식적으로 도입되었습니다. 명령 이벤트는 여전히 메인 스레드에서 한 줄로 처리됩니다.
- 전체 Redis 시스템의 경우 AOF 및 RDB 동기화
-
redis I/O 모델과 같은 비동기 작업을 처리하는 다른 스레드가 항상 있습니다.
redis 처리 속도는 단일 스레드 순수이기 때문만은 아닙니다. 메모리 시스템도 Reactor 모델을 채택하고 I/O 다중화를 사용하여 외부 요청을 처리하고 네트워크 연결을 줄이고 읽기 및 쓰기 대기 시간을 줄입니다. 네트워크 I/O 작업에서 많은 수의 클라이언트 요청을 동시에 처리하여 높은 처리량과 높은 동시성을 달성할 수 있습니다
redis의 다중 스레드 버전 I/O 모델 6.0
자세한 내용 프로그래밍용 관련 지식이 있으면
프로그래밍 입문
을 방문하세요! !
위 내용은 단일 스레드 리액터 모델에 대한 Redis 학습 이야기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!