인프런 커뮤니티 질문&답변

유준모님의 프로필 이미지

작성한 질문수

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)

동시성 vs 병렬성

멀티 스레딩 질문..

24.07.07 16:35 작성

·

93

·

수정됨

0

안녕하세요 강사님 !

동시성과 병렬성의 개념을 멀티스레딩과 연계시켜 이해하는게 어려워 질문 남깁니다.

asyncio 의 경우에는, 싱글 스레드에서 이벤트루프를 이용해서 동시성을 구현했다는 점은 이해가 되었습니다. 그래서 asyncio는 동시성일 수 밖에 없다는 걸로 이해됩니다.

이에 반해, 멀티 스레딩은 동시성일 수도 있고 병렬성일 수도 있다고 생각하는데 제가 맞게 이해한건지 헷갈립니다.

저는 이렇게 이해했는데 한번 과정이 맞는지 검토 요청드립니다.

우선 [c언어]로 구현된 하나의 프로세스만 띄워져 있고, 해당 프로세스가 여러 쓰레드를 생성하는 상황이라고 가정하겠습니다.

이때 멀티 스레딩은, 컴퓨터 환경이 [싱글] 코어였다면, 여러개의 스레드가 결국엔 컨텍스트 스위칭되어 concurrency하게 처리될 수 밖에 없기에 이는 동시성이라고 말할 수 있고,

멀티 코어였다면 여러 쓰레드가 병렬적으로 [각각의 코어]에서 처리가 될수 있기에 이런 경우는 병렬성이라고 말할 수 있을 것 같은데 맞을까요?

즉, 멀티스레딩으로 구현된 프로그램을 두고 이를 동시성이라 부를지 병렬성으로 부를지는 컴퓨터환경이 싱글코어냐 멀티코어냐에 좌우되는지가 궁금합니다.

만약 그런 논리라면 멀티프로세싱도 마찬가지일까요..

멀티프로세싱은 병렬처리라고 생각하고 있긴했는데, 위와 같은 논리라면 싱글코어의 환경에선 여러 프로세스가 존재하더라도 결국엔 os에 의해 컨텍스트 스위칭 되면서 한순간에 하나의 프로세스만 실행되는거니까 동시성으로 전락해버리는게 아닌가..생각됩니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 09. 16:41

안녀하세요, 인프런 AI 인턴입니다.

님의 멀티 스레딩에 대한 이해는 매우 정확합니다. 동시성과 병렬성은 프로그램이 작업을 실행하는 방식과 관련이 있으며, 환경(싱글 코어 혹은 멀티 코어)에 따라 그 구분이 이루어집니다.

동시성(Concurrency)은 싱글 코어 환경에서 여러 작업이 번갈아가며 실행되는 것을 의미합니다. 이는 프로세스나 스레드가 컨텍스트 스위칭을 통해 실행됨으로써, 마치 동시에 수행되는 것처럼 보이게 합니다.

병렬성(Parallelism)은 멀티 코어 환경에서 여러 작업이 실제로 동시에 실행되는 것을 말합니다. 각각의 코어가 다른 작업을 동시에 처리할 수 있기 때문에 작업의 실행 속도가 향상될 수 있습니다.

멀티 스레딩의 경우, 싱글 코어 환경에서는 동시성을 구현하게 되며, 멀티 코어 환경에서는 병렬성을 구현할 수 있게 됩니다. 이는 멀티 프로세싱과도 유사한 상황에서 적용됩니다. 멀티 프로세싱 또한 싱글 코어에서는 여러 프로세스가 번갈아 실행되어 동시성을 구현하고, 멀티 코어 환경에서는 여러 프로세스가 실제로 동시에 실행되어 병렬성을 구현합니다.

따라서, 님이 이해하신 바와 같이 멀티 스레딩이나 멀티 프로세싱을 통해 구현된 프로그램이 동시성을 지니는지, 병렬성을 지니는지는 기본적으로 실행 환경(싱글 코어 또는 멀티 코어)에 따라 결정됩니다.