Redis는 단일 스레드이며 동시 I / O는 어떻게 수행합니까?


170

Redis의 몇 가지 기본 사항을 파악하려고 노력하면서 흥미로운 블로그 게시물을 발견했습니다 .

저자는 다음과 같이 말합니다.

Redis는 epoll / kqueue가있는 단일 스레드이며 I / O 동시성 측면에서 무기한으로 확장됩니다.

나는이 진술이 수수께끼를 찾기 때문에 전체 스레딩을 오해합니다. 프로그램이 단일 스레드 인 경우 어떻게 동시에 작업합니까? 서버가 단일 스레드 인 경우 Redis 작업이 원자력이되는 이유는 무엇입니까?

아무도이 문제에 대해 밝힐 수 있습니까?

답변:


360

그것은 동시성을 정의하는 방법에 달려 있습니다.

서버 측 소프트웨어에서 동시성과 병렬 처리는 종종 다른 개념으로 간주됩니다. 서버에서 동시 I / O를 지원한다는 것은 서버가 하나의 계산 단위로 해당 클라이언트에 해당하는 여러 흐름을 실행하여 여러 클라이언트에 서비스를 제공 할 수 있음을 의미합니다. 이와 관련하여 병렬 처리는 서버가 여러 계산 단위를 사용하여 동시에 여러 작업을 수행 할 수 있음을 의미합니다.

예를 들어 바텐더는 한 번에 하나의 음료 만 준비 할 수있는 동시에 여러 고객을 돌볼 수 있습니다. 따라서 병렬 처리없이 동시성을 제공 할 수 있습니다.

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

Rob Pike의 프레젠테이션 도 참조하십시오 .

단일 스레드 프로그램은 I / O (다중화) 멀티플렉싱 메커니즘과 이벤트 루프 (Redis가 수행하는 작업)를 사용하여 I / O 수준에서 동시성을 제공 할 수 있습니다.

병렬 처리에는 비용이 듭니다. 최신 하드웨어에서 찾을 수있는 다중 소켓 / 다중 코어를 사용하면 스레드 간 동기화 비용이 매우 높습니다. 반면에 Redis와 같은 효율적인 스토리지 엔진의 병목 현상은 CPU보다 훨씬 앞서 네트워크입니다. 따라서 격리되지 않은 이벤트 루프 (동기화가 필요하지 않음)는 효율적이고 확장 가능한 서버를 구축하기에 적합한 디자인으로 간주됩니다.

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


135
멋진 바텐더 유추 :)
Sergio Tulentsev

3
V4는이 점에서 게임 체인저입니다 -에 내 대답을 참조 stackoverflow.com/a/45374864/3160475 :
이타 마르 하버

1
내가 대답과 비교에 대해 정말로 좋아하지 않는 유일한 것은 동시성이 병렬로 작동하지 않는 것처럼 보이게하고 작업을 비동기로 실행하고 궁극적으로 완료 된 작업을 수행하여이를 테스트 할 수 있다는 것입니다. 병렬로 간주됩니다. 이 기사의 맥락에서 병렬 처리는 다중 스레드에서 실행할 수있는 멀티 코어 특성을 나타냅니다. 즉, 스레드 안전하다고 언급하는 이유는 무엇입니까?
Christian Matthew

2020 년에도 유효합니까?
로베르토 만 프레 다

21

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

' 동시 '는 일부 네트워크 이벤트를 소켓 상태 머신에 분배하는 것을 포함합니다. 단일 스레드이며 하나의 코어에서 (사용자 수준에서) 실행되므로이를 동시라고는 언급하지 않습니다. 다른 사람 ..

' I / O 동시성 측면에서 무기한 확장 '은 진실과 함께 경제적입니다. 그들은 '클라이언트 당 하나의 스레드보다 더 나은 확장 성을 제공하여 고객이 많이 요구하지 않음'이라고 말하면 더 많은 신뢰를 얻을 수 있지만 다른 비동기 솔루션으로 인해 많은 양의 로딩에 불을 붙일 필요가 있다고 느낄 수 있습니다 사용자 수준에서 모든 코어를 사용합니다. '


상황에 맞지 않을 수 있지만 각 업데이트 작업 (INCR 명령에 의한)이 잠금을 수행합니까? 키당 1000 개의 동시 요청과 한 번의 증분 작업이있는 경우 (요청 당) 변수가 1000 회만 증분되도록합니까?
아만다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.