💡동시성과 병렬성에 대하여 학습한 내용을 기록하였습니다.
동시성(Concurrency)
- 여러 작업을 실행할 수 있는 능력을 의미하며, 실제로는 한 번의 하나의 작업을 수행하더라도 작업 간 빠르게 전환함으로써 동시에 여러 작업이 진행되는 것처럼 보이게 합니다.
- CPU가 여러 작업을 짧은 시간 간격으로 번갈아가며 실행하기 때문에, 마치 여러 작업이 동시에 수행되는 것처럼 보입니다.
특징
- 프로세스 간 빠른 전환으로 CPU 자원을 최대한 활용할 수 있습니다.
- 하지만 여러 작업이 같은 자원에 접근할 때 데이터 경합 문제 발생이 있을 수 있으며, 이를 해결하기 위한 동기화가 필요합니다.
단일 코어
- 동시성은 하드웨어적으로 병렬 처리가 지원되지 않는 단일 코어에서도 구현 가능합니다.
- [Core] : CPU에 내장된 처리회로로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛
작업 전환
- 작업을 교대로 실행하며, 각 작업이 완전히 끝나기 전에 다른 작업으로 전환됩니다.
- 이를 스레드 또는 프로세스 스케줄링이라고 합니다.
Context Switching
- 동시성은 Context Switching과 밀접하게 연관되어 있습니다.
- 여러 스레드를 이동하면서 현재 진행되고 있는 Task의 상태를 저장하고 다음 진행할 테스트의 상태 값을 읽어 적용하는 방식을 활용할 수 있습니다.
멀티 스레드 프로그래밍
- 안드로이드 앱에서 UI 업데이트를 하는 동시에 네트워크 요청을 처리할 때, 두 작업이 동시에 진행되는 것처럼 보이지만 사실 빠르게 교대되는 경우를 생각할 수 있습니다.
멀티태스킹
- 동시성과 같이 하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 동작하는 방식입니다.
- 하나의 컴퓨터에서 여러 프로그램이 동시에 실행될 수 있는 기능을 말하며, CPU 시간을 분할하여 동시에 실행되는 것처럼 보이도록 합니다.
- 이는 하나의 시스템에서 여러 작업을 동시에 실행하는 것을 말하며 하드웨어적인 측면에서 봤을 때 동시성의 상위 인자로 생각할 수 있습니다.
병렬성(Parallelism)
- 병렬성은 여러 작업이 실제로 동시에 실행되는 것을 의미합니다.
- 여러 작업이 동시에 실행되고 결과를 동시에 얻는 방식입니다.
특징
- 여러 코어에서 작업을 동시에 처리할 수 있으므로, 작업 처리 속도가 빨라집니다.
- 대규모 데이터 처리 시 큰 이점을 얻을 수 있으며, 실제 작업 시간이 단축됩니다.
- 하지만 자원 관리가 복잡해질 수 있으며 데드락이나 레이스 컨디션이 발생할 수 있습니다.
- 병렬 처리하는 하드웨어 코어 수가 적으면 병렬성의 효과도 감소합니다.
멀티 코어
- 멀티코어 프로세서에서 각 코어가 서로 다른 작업을 동시에 처리하는 방식으로 구현됩니다.
- 동영상 인코딩, 파일 압축 등 계산량이 많은 작업이 병렬로 나눠저 실제로 동시에 실행됩니다.
동시성 vs 병렬성
정의 | 여러 작업을 동시에 실행하는 것처럼 보이게 처리 | 여러 작업을 실제로 동시에 실행 |
작동 방식 | 작업 간 빠른 전환으로 동시에 진행되는 것처럼 보임 | 멀티코어를 이용하여 여러 작업을 동시에 수행 |
필요한 하드웨어 | 단일 코어에서도 가능 | 멀티코어가 필요 |
효율성 | 작업 간 전환을 통해 CPU를 최대한 활용 | 코어가 많을수록 더 많은 작업을 병렬로 처리 가능 |
복잡성 | 스레드 간 상호작용 및 스케줄링 문제로 복잡해질 수 있음 | 여러 코어 간 자원 관리가 필요 |
예시 | 멀티스레드 프로그래밍, I/O 작업 처리 | 과학 계산, 영상 인코딩, |