복붙노트

[REDIS] 레디 스는 단일 스레드이며, 다음 어떻게 동시 I / O 작업을 수행합니까?

REDIS

레디 스는 단일 스레드이며, 다음 어떻게 동시 I / O 작업을 수행합니까?

레디 스 I의 몇 가지 기본을 파악하기 위해 노력하는 것은 흥미로운 블로그 게시물을 가로 질러왔다.

저자 상태 :

확실히 내가 오해 전체 스레딩 것은, 내가 수수께끼이 문을 찾을 수 있기 때문이다. 프로그램이 단일 스레드 경우, 어떻게 동시에 무엇을합니까? 왜 서버가 어쨌든 단일 스레드 경우 레디 스 작업이 원자 것을 너무 중대하다?

아무도이 문제에 도움이 되거 주실 래요?

해결법

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

    1.그럼 당신이 동시성을 정의하는 방법에 따라 달라집니다.

    그럼 당신이 동시성을 정의하는 방법에 따라 달라집니다.

    서버 측 소프트웨어에서 동시성 및 병렬 처리는 종종 다른 개념으로 간주됩니다. 서버에서의 동시 지원 I / O의 서버가 하나 개의 연산 유닛으로 해당 고객에 대응하는 여러 가지의 흐름을 실행함으로써 여러 클라이언트를 제공 할 수있는 것을 의미한다. 이러한 상황에서, 병렬 서버가 다르다 (다중 연산 유닛)와 동일한 시간에서 몇 일을 수행 할 수있는 것을 의미한다.

    예를 들어 바텐더는 그가 한 번에 하나 개의 음료를 준비 할 수있는 동안 여러 고객을 돌볼 수 있습니다. 그래서 그는 병렬 처리하지 않고 동시성을 제공 할 수 있습니다.

    이 질문은 여기에서 논의되었다 : 동시성과 병렬 처리의 차이점은 무엇입니까?

    또한 롭 파이크에서이 프레젠테이션을 참조하십시오.

    단일 스레드 프로그램은 확실히 I / O (드) 다중화기구 (레디 스가하는 일입니다) 이벤트 루프를 사용하여 I / O 수준에서 동시성을 제공 할 수 있습니다.

    병렬 처리 비용을 가지고 : 여러 소켓 / 멀티 코어로는 현대 하드웨어에서 찾을 수 있습니다, 스레드 간의 동기화는 매우 비싸다. 반면에, 레디 스 같은 효율적인 스토리지 엔진의 병목 현상은 물론 CPU 전에, 매우 자주 네트워크입니다. 절연 이벤트 루프 (더 동기화를 필요로하지 않는) 때문에, 서버를 효율적이고 확장 성을 구축하는 좋은 디자인으로 볼 수 있습니다.

    레디 스 작업이 원자 있다는 사실은 단순히 단일 스레드 이벤트 루프의 결과이다. 흥미로운 점은 자성 (이것은 동기화가 필요하지 않습니다) 추가 비용없이 제공된다. 동기화 오버 헤드 비용을 지불하지 않고 낙관적 잠금 및 다른 패턴을 구현하기 위해 사용자에 의해 악용 될 수 있습니다.

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

    2.OK, 레디 스 단일 스레드 사용자 수준에있다, OTOH, 모든 비동기 I / O는 커널 스레드 풀 및 / 또는 분할 수준의 드라이버에 의해 지원됩니다.

    OK, 레디 스 단일 스레드 사용자 수준에있다, OTOH, 모든 비동기 I / O는 커널 스레드 풀 및 / 또는 분할 수준의 드라이버에 의해 지원됩니다.

    일부 '동시'는, 소켓 상태 머신에 네트워크 이벤트를 배포하는 것을 포함한다. 나는 동시로 이쪽을 참조하지 않을 그래서, (사용자 수준에서) 하나 개의 코어에, 실행을 단일 스레드입니다. 다른 사람은 다른 ..

    진실과 단지 인 경제적 인 'I / O 동시성의 관점에서 무기한 규모'. 그들이 말한 경우에 그들은 다음 다른 비동기 솔루션이 무거운 하중에 날아 '를 추가 할 의무가 느낄 수 있지만 그들은'한 스레드 당 클라이언트, 클라이언트를 제공하는 것이 많이 요구하지 않는보다 더 확장 할 수있는 '더 믿음을 얻을 수 있습니다 '사용자 수준에서 모든 코어를 사용하는.

  3. from https://stackoverflow.com/questions/10489298/redis-is-single-threaded-then-how-does-it-do-concurrent-i-o by cc-by-sa and MIT license