[CS] 동시성 vs 병렬성

💡동시성과 병렬성에 대하여 학습한 내용을 기록하였습니다.

동시성(Concurrency)

  • 여러 작업을 실행할 수 있는 능력을 의미하며, 실제로는 한 번의 하나의 작업을 수행하더라도 작업 간 빠르게 전환함으로써 동시에 여러 작업이 진행되는 것처럼 보이게 합니다.
  • CPU가 여러 작업을 짧은 시간 간격으로 번갈아가며 실행하기 때문에, 마치 여러 작업이 동시에 수행되는 것처럼 보입니다.

특징

  • 프로세스 간 빠른 전환으로 CPU 자원을 최대한 활용할 수 있습니다.
  • 하지만 여러 작업이 같은 자원에 접근할 때 데이터 경합 문제 발생이 있을 수 있으며, 이를 해결하기 위한 동기화가 필요합니다.

단일 코어

  • 동시성은 하드웨어적으로 병렬 처리가 지원되지 않는 단일 코어에서도 구현 가능합니다.
  • [Core] : CPU에 내장된 처리회로로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛

작업 전환

  • 작업을 교대로 실행하며, 각 작업이 완전히 끝나기 전에 다른 작업으로 전환됩니다.
  • 이를 스레드 또는 프로세스 스케줄링이라고 합니다.

Context Switching

  • 동시성은 Context Switching과 밀접하게 연관되어 있습니다.
  • 여러 스레드를 이동하면서 현재 진행되고 있는 Task의 상태를 저장하고 다음 진행할 테스트의 상태 값을 읽어 적용하는 방식을 활용할 수 있습니다.

멀티 스레드 프로그래밍

  • 안드로이드 앱에서 UI 업데이트를 하는 동시에 네트워크 요청을 처리할 때, 두 작업이 동시에 진행되는 것처럼 보이지만 사실 빠르게 교대되는 경우를 생각할 수 있습니다.

멀티태스킹

  • 동시성과 같이 하나의 시스템이 여러 작업을 동시에 처리하는 것처럼 동작하는 방식입니다.
  • 하나의 컴퓨터에서 여러 프로그램이 동시에 실행될 수 있는 기능을 말하며, CPU 시간을 분할하여 동시에 실행되는 것처럼 보이도록 합니다.
  • 이는 하나의 시스템에서 여러 작업을 동시에 실행하는 것을 말하며 하드웨어적인 측면에서 봤을 때 동시성의 상위 인자로 생각할 수 있습니다.

병렬성(Parallelism)

  • 병렬성은 여러 작업이 실제로 동시에 실행되는 것을 의미합니다.
  • 여러 작업이 동시에 실행되고 결과를 동시에 얻는 방식입니다.

특징

  • 여러 코어에서 작업을 동시에 처리할 수 있으므로, 작업 처리 속도가 빨라집니다.
  • 대규모 데이터 처리 시 큰 이점을 얻을 수 있으며, 실제 작업 시간이 단축됩니다.
  • 하지만 자원 관리가 복잡해질 수 있으며 데드락이나 레이스 컨디션이 발생할 수 있습니다.
  • 병렬 처리하는 하드웨어 코어 수가 적으면 병렬성의 효과도 감소합니다.

멀티 코어

  • 멀티코어 프로세서에서 각 코어가 서로 다른 작업을 동시에 처리하는 방식으로 구현됩니다.
  • 동영상 인코딩, 파일 압축 등 계산량이 많은 작업이 병렬로 나눠저 실제로 동시에 실행됩니다.

동시성 vs 병렬성

정의 여러 작업을 동시에 실행하는 것처럼 보이게 처리 여러 작업을 실제로 동시에 실행
작동 방식 작업 간 빠른 전환으로 동시에 진행되는 것처럼 보임 멀티코어를 이용하여 여러 작업을 동시에 수행
필요한 하드웨어 단일 코어에서도 가능 멀티코어가 필요
효율성 작업 간 전환을 통해 CPU를 최대한 활용 코어가 많을수록 더 많은 작업을 병렬로 처리 가능
복잡성 스레드 간 상호작용 및 스케줄링 문제로 복잡해질 수 있음 여러 코어 간 자원 관리가 필요
예시 멀티스레드 프로그래밍, I/O 작업 처리 과학 계산, 영상 인코딩,

참고

https://velog.io/@kwontae1313/동시성과-병렬성의-개념과-차이