복붙노트

[REDIS] 레디 스 단일 스레드 인 이유 (이벤트 구동)

REDIS

레디 스 단일 스레드 인 이유 (이벤트 구동)

나는 레디 스의 이해를 기본으로 노력하고 있습니다. 하나는 모든 곳에서 오는 그 킵인지, 레디 스 내가이 작동하고 internally.I 의심 이하가 상상할 수없는 나는 atomic.But 일을하게 단일 스레드입니다.

이 스레드가 IO 작업이 (동시성을 제공)이 완료되면 클라이언트에 IO 작업 및 반환 데이터를 초기화 한 후 다른 요청에 대한 무료 어디서 얻었 IO는 (Node.js를 같은) 응용 프로그램을 결합하는 경우 우리는 서버 단일 스레드를 디자인하지 마십시오. 그러나 경우의 모든 데이터를 메인 메모리에서 사용할 수있는 레디 스, 우리는 요청을 남아 계속해야한다, 레디 스 단일 스레드가 왜 첫 번째 요청이 많은 시간에 복용하면 다음? 어떤 일이 일어날 all.So에서 IO 작업을하지 않을 수 있습니다 기다리는?

해결법

  1. ==============================

    1.TL; DR : 단일 스레드 차종은 간단 레디 스 및 IO 바인딩 여전히 레디 스.

    TL; DR : 단일 스레드 차종은 간단 레디 스 및 IO 바인딩 여전히 레디 스.

    메모리 I / O입니다. 레디 스 여전히 I입니다 / O 바운드. 레디 스는 부하이며 일반적으로 네트워크 대역폭 또는 메모리 대역폭 부족을 겪지 초당 최대 요청에 도달하고, 일반적으로 많은 CPU의 사용하지 않을 때. 이 이것이 사실되지 않습니다되는 특정 명령이 있지만 대부분의 사용 사례의 레디 스이 될 것입니다에 대한 심각한 I / O는 네트워크 나 메모리에 구속.

    메모리 및 네트워크 속도가 갑자기 빠르게 규모의 주문을 얻을하지 않는 한, 단일 스레드가되는 것은 보통 문제가되지 않습니다. 하나 또는 몇 개의 스레드 이상으로 확장해야하는 경우 (예 : 마스터 <-> 슬레이브 <-> 슬레이브 설정) 이미 레디 스 클러스터에서 찾고 있습니다. 어떻게 든 CPU 굶어하고 스레드의 수를 최대화하려는 경우이 경우에는 CPU 코어 당 클러스터 인스턴스를 설정할 수 있습니다.

    나는 레디 스 소스 또는 내부에 아주 익숙하지 않은,하지만 하나의 스레드를 사용하여 쉽게 잠금없는 원자 작업을 구현할 수 있습니다 어떻게 볼 수 있습니다. 스레드이 더 복잡하게 만들 것와 레디 스가 CPU에 바인딩되지 않기 때문에 큰 이점을 제공하기 위해 표시되지 않습니다. 레디 스 인스턴스 위의 수준에서 동시성을 구현하는 것은 좋은 솔루션과 같은 것, 그리고 무엇 레디 스 센티넬과 레디 스 클러스터 도움이됩니다.

    레디 스 긴 요청을 완료 할 때까지 그 다른 요청은 차단합니다. 필요한 경우, 클라이언트 - 일시 중지 명령을 사용하여이 테스트 할 수 있습니다.

  2. ==============================

    2.정답은 물론, 칼의입니다. 하나.

    정답은 물론, 칼의입니다. 하나.

    레디 스에서 우리는 선택적으로 조심스럽게 멀티 스레드에 주로 단일 스레드 인에서 변화의 시작을보고있다 V4. 모듈 및 스레드 안전 상황은 그 한 예이다. 또 다른 두 FLUSHDB / FLUSHALL에 대한 새로운 UNLINK 명령과 ASYNC 모드입니다. 미래의 계획은 현재 작업자 스레드의 메인 이벤트 루프 (예를 들어, IO 바인딩 작업)에 의해 수행되고있어 더 많은 작업을 오프로드 할 수 있습니다.

  3. from https://stackoverflow.com/questions/45364256/why-redis-is-single-threadedevent-driven by cc-by-sa and MIT license