동시성과 병렬성 🤷‍♂️

Kuno17·2023년 4월 27일
0

CS공부

목록 보기
3/17
post-thumbnail

동시성과 병렬성

동시성과 병렬성은 유사해 보이지만 다음과 같이 명확한 차이점을 가진다.

다음은 그림으로 비교해서 작동방식이 어떡게 다른지 확실하게 알 수 있다.
동시성이 하나의 코어에서 여러 작업을 번갈아가면서(Context Switching) 진행하지만 그렇다고 코어를 1개만 사용해서 구축하는 것은 아닌점을 알 수 있다.

병렬성은 그림과 말 그대로 완전히 분리해서 작업을 코어별로 나눠서 진행하는점을 알 수 있다.

동시성

동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다. 동시에 실행하는 것이 아니라 CPU가 작업마다 시간을 분할해서 적절하게 Context switching을 해서 동시에 실행되는 것처럼 보이게 한다. 이러한 이유로 구현과 디버그에 있어 어려움이 있다.

동시성의 핵심 목표는 유휴 시간을 최소화 하는 것이다.
유휴 시간 : 컴퓨터가 작동 가능한데도 작업을 하지 않는 시간으로 즉 노는시간이다.

이 여러개의 task들은 하나 이상의 코어에서 실행되며 같은 시간에 같은 자원에 접근하는 상황이 생길 수 있다.
→Core1과 Core2가 동시에 task1에 접근하는 경우
해당 자원에 write권한으로 접근하는 경우 데이터 무결성 유지를 염두해야 한다.

병렬성

병렬성은 동일한 시간에 독립적인 작업을 실행할 수 있음을 의미한다. 동시성과는 달리 여러 작업을 다른 코어, 다른 프로세스, 별도의 컴퓨터 등에서 동시에 실행할 수 있다. 그래서 병렬 처리가 성능 향상에 필수적이라고도 한다.

그렇다면 병렬성이 항상 좋은가?

  • 일반적으로는 성능이 더욱더 좋다
  • 그러나 물리적인 코어 개수에 제한을 받는다
  • 실제 작업이 병렬적으로 처리할 수 없는 경우가 많다 (작업이 쪼개서 처리할 수 없는 경우)
  • 처리하는 작업이 주로 I/O 위주의 작업인 경우
    • CPU로 데이터를 처리하는 시간보다 대부분의 데이털르 가져오는데 시간을 소비함.
    • CPU가 놀고 있을 때 다른 작업을 처리할 수 없음.
    • 동시성이 효과적인 케이스

참조 자료

후기

동시성과 병렬성에 대해서 알게되었다. 하지만 실제로 우리 프로젝트에 어떻게 적용할 수 있는지는 스레드에 대한 개념과 좀더 깊은 지식을 요구하기 때문에 쉽게 테스트 해볼 수 없었다.
일단 당장 공부하면서 궁금했던 점들을 기록한다.

  • 작업을 쪼갤 수 있고 없고는 어떻게 알 수 있을까?
  • 프로젝트에 적용한다면 어디에 적용할 수 있을까?

추후에 추가적인 공부를 진행 후 테스트하고 적용해볼 필요성을 느꼈다.

profile
자바 스터디 정리 - 하단 홈 버튼 참조.

0개의 댓글