찾다
데이터 베이스RedisRedis가 단일 스레드인 이유는 무엇입니까?

Redis가 단일 스레드인 이유는 무엇입니까?

과거에는 고성능 서버를 구현하려면 멀티 쓰레드로 구현해야 한다는 오해가 늘 있었습니다.

이유는 매우 간단합니다. 오해로 인해 2: 멀티 쓰레드가 싱글 쓰레드보다 효율적이어야 합니다. . 설마.

redis core는 내 모든 데이터가 메모리에 있으면 단일 스레드 작업이 가장 효율적이라는 것입니다. 왜죠? 멀티 스레딩의 본질은 CPU가 여러 스레드를 시뮬레이션한다는 것입니다. 이것이 바로 컨텍스트 스위칭인데, 메모리 시스템에서는 컨텍스트 스위칭이 없는 것이 가장 효율적이다.

Redis는 단일 CPU를 사용하여 메모리 데이터 조각을 바인딩한 다음 이 메모리의 데이터를 여러 번 읽고 쓸 때 모두 하나의 CPU에서 수행되므로 이 문제를 단일 스레드에서 처리합니다. 메모리의 경우 이 솔루션이 가장 좋습니다. (권장: "redis 비디오 튜토리얼")

CPU 컨텍스트 전환에 약 1500ns가 걸리기 때문입니다.

메모리에서 1MB의 연속 데이터를 읽는 데 약 250us가 소요됩니다. 1MB의 데이터를 여러 스레드에서 1000번 읽은 다음 1000번의 시간 컨텍스트 전환이 있다고 가정하면

그러면 1500ns * 1000 = 1500us가 소요됩니다. 단일 스레드에서 1MB의 데이터를 읽는 데 시간 컨텍스트를 전환하는 데 1500us가 걸렸습니다. 매번 작은 데이터를 읽는 데 걸리는 시간은 포함되지 않습니다.

그렇다면 언제 멀티 스레드를 사용해야 할까요? 해결책? ?

답은: 하위 계층 스토리지 및 기타 느린 상황입니다. 예를 들어 disk

memory는 IOPS가 매우 높은 시스템입니다. 메모리 조각을 신청하려면 메모리 조각을 신청하고, 메모리 조각을 파괴하면 메모리 조각도 파괴되기 때문입니다. .기억을 신청하고 파기하는 것은 매우 쉽습니다. 그리고 메모리는 크기에 따라 동적으로 적용될 수 있습니다.

디스크의 특징은 다음과 같습니다. IPOS는 매우 낮지만 처리량이 매우 높습니다. 이는 최고의 성능을 달성하려면 많은 수의 읽기 및 쓰기 작업을 함께 수집한 다음 디스크에 제출해야 함을 의미합니다. 왜?

트랜잭션 그룹 작업(즉, 쓰기, 읽기, 쓰기, 읽기 및 쓰기와 같은 여러 개의 분리된 트랜잭션 요청, 이 5가지 작업이 함께 있음)이 있는 경우 IOPS가 매우 높기 때문에 메모리에 하나씩 완료했지만 디스크에 이 요청 방법도 있으면

첫 번째 쓰기 작업은 다음과 같이 완료됩니다. 먼저 하드 디스크에서 주소를 찾는데 약 10ms가 소요됩니다. 그런 다음 조각을 읽습니다. 1ms가 걸릴 수 있는 데이터 작업(무시) 후 하드 디스크에 다시 쓰는 데 10ms가 더 소요되어 총 21ms가 소요됩니다.

두 번째 작업에서는 읽는 데 10ms가 걸렸고, 세 번째 작업에서는 쓰는 데 21ms가 걸렸습니다. , 그리고 나서 10ms를 읽고 21ms를 썼는데, 요청 5개 총 83ms가 소요되는데, 이는 여전히 메모리에 있다면 1ms 미만일 것입니다.

따라서 이렇게 처리량이 많은 디스크의 경우 가장 좋은 솔루션은 N개의 요청을 버프에 함께 넣은 다음 함께 제출하는 것입니다.

방법은 비동기식을 사용하는 것입니다. 요청을 처리 스레드에 바인딩하지 않고 요청 스레드가 요청을 버프에 넣은 다음 버프가 거의 가득 찰 때까지 기다린 다음 처리 스레드가 버프를 처리합니다. 그런 다음 이 버프를 사용하여 디스크에 쓰거나 디스크를 균일하게 읽으므로 효율성이 가장 높습니다. Java의 IO가 그런거 아닌가요~

느린 장치에는 이 처리 방법이 가장 좋습니다. 느린 장치에는 디스크, 네트워크, SSD 등이 포함됩니다.

이러한 문제를 처리하는 멀티스레딩, 비동기 방식은 매우 일반적입니다. 유명한 netty가 이런 일을 합니다.

마지막으로 redis가 왜 싱글스레딩인지, 언제 싱글스레딩과 멀티스레딩을 사용해야 하는지 명확히 했습니다. 사실 그것도 아주 간단한 일이지만 기초가 좋지 않으면 정말 당황스럽습니다. . . .

마스터의 인용문 추가: 단일 코어 CPU를 메모리 조각에 바인딩하는 것이 가장 효율적인 이유에 대해 이야기해 보겠습니다.

“우리는 자체 프로그램을 더 잘 알고 있기 때문에 운영 체제 로드 밸런싱을 허용할 수 없습니다. 수동으로 할 수 있습니다. CPU를 너무 많이 차지하지 않고 CPU 코어를 할당합니다." 기본적으로 단일 스레드는 시스템 호출을 할 때 CPU 코어를 무작위로 사용합니다. Redis를 최적화하기 위해 고정된 CPU 코어를 단일 스레드에 바인딩하는 도구를 사용할 수 있습니다. 불필요한 성능 손실을 줄입니다!

Redis는 멀티 코어 CPU를 최대한 활용하기 위해 하나의 서버에서 여러 인스턴스가 시작되는 경우가 많은 단일 프로세스 모델 프로그램입니다. 전환 비용을 줄이려면 각 인스턴스가 실행되는 CPU를 지정해야 합니다.

Linux의 Taskset은 프로세스를 특정 CPU에 바인딩할 수 있습니다. 스케줄러가 프로그램을 어리석게 예약하는 것을 피하거나 다중 스레드 프로그램에서 캐시 무효화로 인한 오버헤드를 피하기 위해 운영 체제보다 프로그램을 더 잘 알고 있습니다.

위 내용은 Redis가 단일 스레드인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
REDIS : SQL 너머 - NOSQL 관점REDIS : SQL 너머 - NOSQL 관점May 08, 2025 am 12:25 AM

Redis는 고성능과 유연성으로 인해 SQL 데이터베이스를 뛰어 넘습니다. 1) Redis는 메모리 스토리지를 통해 매우 빠른 읽기 및 쓰기 속도를 달성합니다. 2) 복잡한 데이터 처리에 적합한 목록 및 컬렉션과 같은 다양한 데이터 구조를 지원합니다. 3) 단일 스레드 모델은 개발을 단순화하지만 높은 동시성은 병목 현상이 될 수 있습니다.

REDIS : 기존 데이터베이스 서버와 비교REDIS : 기존 데이터베이스 서버와 비교May 07, 2025 am 12:09 AM

Redis는 동시성이 높은 기존 데이터베이스보다 우수하고 대기 시간 시나리오가 낮지 만 복잡한 쿼리 및 트랜잭션 처리에는 적합하지 않습니다. 1.Redis는 메모리 저장, 빠른 읽기 및 쓰기 속도, 높은 동시성 및 낮은 대기 시간 요구 사항에 적합합니다. 2. 전통적인 데이터베이스는 디스크를 기반으로하며 복잡한 쿼리 및 트랜잭션 처리를 지원하며 데이터 일관성과 지속성이 강합니다. 3. Redis는 기존 데이터베이스의 보충 또는 대체물로 적합하지만 특정 비즈니스 요구에 따라 선택해야합니다.

REDIS : 강력한 메모리 내 데이터 저장소 소개REDIS : 강력한 메모리 내 데이터 저장소 소개May 06, 2025 am 12:08 AM

redisisahigh-performancein-memorydatrscructurestorestorethexcelscelsspeedandversitility

Redis는 주로 데이터베이스입니까?Redis는 주로 데이터베이스입니까?May 05, 2025 am 12:07 AM

Redis는 주로 데이터베이스이지만 단순한 데이터베이스 이상입니다. 1. 데이터베이스로서 Redis는 지속성을 지원하고 고성능 요구에 적합합니다. 2. 캐시로서 Redis는 응용 프로그램 응답 속도를 향상시킵니다. 3. 메시지 중개인으로서 Redis는 실시간 커뮤니케이션에 적합한 Publish-Subscribe 모드를 지원합니다.

REDIS : 데이터베이스, 서버 또는 기타?REDIS : 데이터베이스, 서버 또는 기타?May 04, 2025 am 12:08 AM

redisiSamultifacetedToolthatservesAsadatabase, Server 및 more.ItfunctionsAnin-memoryDatrastRuctureStore, SupportSvariousDatastructures, andCanbeusedAsacache, MessageBroker, SessionStorage, 및 FordiptributedLocking을 지원합니다.

Redis : 목적과 주요 응용 프로그램을 공개합니다Redis : 목적과 주요 응용 프로그램을 공개합니다May 03, 2025 am 12:11 AM

redisisanopen-source, in-memorydatructurestorestoreusedasadatabase, cache 및 messagebroker, excell

REDIS : 키 가치 데이터 저장에 대한 안내서REDIS : 키 가치 데이터 저장에 대한 안내서May 02, 2025 am 12:10 AM

Redis는 데이터베이스, 캐시 및 메시지 중개인으로 사용되는 오픈 소스 메모리 데이터 구조 스토리지로 빠른 응답 및 높은 동시성이 필요한 시나리오에 적합합니다. 1.Redis는 메모리를 사용하여 데이터를 저장하고 마이크로 초 읽기 및 쓰기 속도를 제공합니다. 2. 문자열, 목록, 컬렉션 등과 같은 다양한 데이터 구조를 지원합니다. 3. Redis는 RDB 및 AOF 메커니즘을 통한 데이터 지속성을 인식합니다. 4. 단일 스레드 모델 및 멀티플렉싱 기술을 사용하여 요청을 효율적으로 처리하십시오. 5. 성능 최적화 전략에는 LRU 알고리즘 및 클러스터 모드가 포함됩니다.

Redis : 캐싱, 세션 관리 등Redis : 캐싱, 세션 관리 등May 01, 2025 am 12:03 AM

Redis의 기능에는 주로 캐시, 세션 관리 및 기타 기능이 포함됩니다. 1) 캐시 함수는 메모리를 통해 데이터를 저장하여 읽기 속도를 향상시키고 전자 상거래 웹 사이트와 같은 고주파 액세스 시나리오에 적합합니다. 2) 세션 관리 기능은 분산 시스템에서 세션 데이터를 공유하고 만료 시간 메커니즘을 통해 자동으로 정리합니다. 3) 실시간 메시지 푸시 및 다중 스레드 시스템 및 기타 시나리오에 적합한 Publish-Subscribe 모드, 분산 잠금 및 카운터와 같은 기타 기능.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경