그것은 동시성을 정의하는 방법에 달려 있습니다.
서버 측 소프트웨어에서 동시성과 병렬 처리는 종종 다른 개념으로 간주됩니다. 서버에서 동시 I / O를 지원한다는 것은 서버가 하나의 계산 단위로 해당 클라이언트에 해당하는 여러 흐름을 실행하여 여러 클라이언트에 서비스를 제공 할 수 있음을 의미합니다. 이와 관련하여 병렬 처리는 서버가 여러 계산 단위를 사용하여 동시에 여러 작업을 수행 할 수 있음을 의미합니다.
예를 들어 바텐더는 한 번에 하나의 음료 만 준비 할 수있는 동시에 여러 고객을 돌볼 수 있습니다. 따라서 병렬 처리없이 동시성을 제공 할 수 있습니다.
이 질문은 여기서 논의되었습니다 :
동시성과 병렬 처리의 차이점은 무엇입니까?
Rob Pike의 프레젠테이션 도 참조하십시오 .
단일 스레드 프로그램은 I / O (다중화) 멀티플렉싱 메커니즘과 이벤트 루프 (Redis가 수행하는 작업)를 사용하여 I / O 수준에서 동시성을 제공 할 수 있습니다.
병렬 처리에는 비용이 듭니다. 최신 하드웨어에서 찾을 수있는 다중 소켓 / 다중 코어를 사용하면 스레드 간 동기화 비용이 매우 높습니다. 반면에 Redis와 같은 효율적인 스토리지 엔진의 병목 현상은 CPU보다 훨씬 앞서 네트워크입니다. 따라서 격리되지 않은 이벤트 루프 (동기화가 필요하지 않음)는 효율적이고 확장 가능한 서버를 구축하기에 적합한 디자인으로 간주됩니다.
Redis 작업이 원 자성이라는 사실은 단순히 단일 스레드 이벤트 루프의 결과입니다. 흥미로운 점은 원 자성이 추가 비용없이 제공된다는 것입니다 (동기화가 필요하지 않음). 사용자는 동기화 오버 헤드를 지불하지 않고도 낙관적 잠금 및 기타 패턴을 구현할 수 있습니다.