Search

[도움이 되었으면 좋겠어요 2편] 동시성과 스레드

Status
UPLOADING
Date
2023/12/08
Tags
Blog

개요

[도움이 되었으면 좋겠어요 1편] Trashing 에 이어 동시성과 스레드에 대해서 작성하게 되었습니다.

1. 스레드란?

스레드란 프로그램의 실행 단위입니다. 즉, 프로세스내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하고 있으며, 최근에는 대부분의 애플리케이션이 두 개 이상의 스레드를 가지는 멀티 스레드를 지원합니다.
프로세스를 생성하는 것은 비용이 많이 들지만 (heavy-weight) 스레드를 생성하는 것은 비교적 비용이 적게 들어 훨씬 더 효율적입니다.
왜 비용에서 차이가 날까요?
프로세스는 각자 독립적인 주소 공간을 가집니다. 반면에 스레드는 주소 공간을 공유합니다.

2. 유저 스레드와 커널 스레드

3. 멀티 스레딩의 이점

두 개 이상의 스레드를 가지는 멀티 스레딩이 가지는 이점은 크게 네 가지로 구분할 수 있습니다.
Responsiveness (응답성): 멀티 스레딩은 프로그램이 더 빠르게 응답할 수 있게 해줍니다. 예를 들어, 사용자 인터페이스를 가진 어플리케이션에서 하나의 스레드가 긴 작업을 처리하는 동안, 다른 스레드가 사용자의 입력에 계속 응답할 수 있습니다. 이로 인해 프로그램이 멈춘 것처럼 보이지 않고, 사용자 경험이 향상됩니다.
Resource Sharing (자원 공유): 스레드들은 프로세스 내의 메모리와 자원을 공유합니다. 이는 프로세스 간의 자원 공유보다 효율적이며, 데이터를 교환하기 위한 복잡한 메커니즘이나 오버헤드 없이도 스레드들이 서로의 데이터에 쉽게 접근할 수 있게 해줍니다. 이는 자원 사용의 효율성을 높이고, 프로그램 실행의 효율성을 증가시킵니다.
Economy (경제성): 멀티 스레딩은 프로세스 생성 비용보다 스레드를 생성하고 관리하는 데 드는 비용이 훨씬 적습니다. 스레드 간의 컨텍스트 스위칭은 프로세스 간의 컨텍스트 스위칭보다 덜 자원을 소모하고 더 빠릅니다. 이로 인해 시스템의 전반적인 성능이 향상됩니다.
Scalability (확장성): 멀티코어 및 멀티프로세서 시스템에서 멀티 스레딩은 프로그램의 성능을 크게 향상시킬 수 있습니다. 다수의 스레드가 동시에 여러 프로세서에서 실행될 수 있으므로, 프로그램은 추가적인 하드웨어 자원을 더 효과적으로 활용할 수 있습니다. 이는 특히 대규모 데이터 처리나 계산 집약적인 작업에 있어서 중요한 이점을 제공합니다.

3. 멀티 코어

멀티 코어 프로그래밍의 큰 특징은 Parallelism (병렬성) Concurrency (동시성) 로 나눌 수 있습니다.
병렬성은 여러 작업이 동시에 실행되는 것을 의미합니다. 이를 통해 작업 처리 시간을 단축시키고 성능을 향상시킬 수 있습니다. 예를 들어, 데이터를 여러 조각으로 나누어 각각을 다른 프로세서가 동시에 처리하는 경우, 이는 병렬 처리의 예입니다.
반면, 동시성은 여러 작업이 시간적으로 중첩되어 실행되는 것을 의미합니다. 이는 싱글 코어 프로세서에서도 구현될 수 있으며, 여러 작업이 번갈아 가며 일부분씩 실행되는 방식으로 진행됩니다. 동시성은 작업들이 동시에 실행되고 있는 것처럼 보이지만, 실제로는 각 작업이 매우 빠른 속도로 전환되면서 수행됩니다.
Parallelism은 또한 Data parallelismTask parallelism으로 나눌 수 있습니다.