[OS] 스레드(Thread), 멀티 스레드(Multi Thread), 동기화(Synchronization)

장유진·2023년 2월 19일
0

Computer Science

목록 보기
5/7

스레드(Thread)란?

스레드는 프로세스 내에서 이루어지는 작업 흐름을 수행하는 단위입니다.
프로세스는 컴퓨터의 자원을 분할해서 사용하지만 스레드는 프로세스 내부에 존재하므로, 프로세스의 자원을 공유합니다.
모든 프로세스는 한 개 혹은 그 이상의 스레드를 가지고 있고, 두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드(Multi Thread)라고 합니다.

멀티 스레드(Multi Thread)

동시성(Concurrency)과 병렬성(Parallelism)

프로세스는 동시적, 병렬적, 혹은 이 둘이 혼합된 방식으로 작동합니다.

싱글 코어(Core* CPU)인 경우 멀티 스레드를 통해 동시성(Concurrency)을 높일 수 있습니다.
빠르게 스레드 간에 문맥 교환(Context Switching)을 진행하면서, 동시에 실행되는 것처럼 보이게 하는 것을 동시성이라고 합니다.

멀티 코어인 경우 멀티 스레드를 통해 병렬성(Parallelism)을 높일 수 있습니다.
각각 동시에 작업을 수행하는 것을 병렬성이라고 합니다. (동시성과는 달리 실제로 작업이 진행)

멀티 스레드(Multi Thread) 장점

  1. 응답성(Responsiveness)
    하나의 스레드가 작업을 수행하는 동안, 다른 스레드에서 사용자의 요청을 처리할 수 있기 때문에 멀티 스레드를 사용할 경우 응답성이 향상됩니다.
  1. 자원 공유(Resource sharing)
    프로세스는 IPC 기법 등을 사용해야만 자원을 공유할 수 있습니다. 그러나 스레드는 프로세스 내부 자원과 메모리를 공유합니다.
    한 주소 영역 안에 여러 개의 스레드를 위치시킬 수 있으므로 메모리 공간과 시스템 자원 소모를 줄일 수 있습니다.

  2. 경제성(Economy)
    스레드는 프로세스의 메모리를 공유하기 때문에 비교적 통신 비용이 적고 스레드 생성과 문맥 교환(Context Switching)에 상대적으로 더 적은 자원을 사용합니다. 일반적으로 스레드보다 프로세스를 만들고 관리하는 데 훨씬 더 많은 시간이 소요됩니다.

  3. 확장성(Scalability)
    각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있으므로 멀티프로세서(다중 CPU)에서의 병렬성이 증가합니다.

멀티 스레드(Multi Thread) 단점

  1. 싱글 코어일 때, 스레드를 많이 생성했을 경우 Context Switching이 많이 일어나 오히려 성능이 저하될 수 있습니다.

  2. 멀티 프로세스 프로세스는 서로 독립적으로 작동하기 때문에 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향이 가지 않지만, 멀티 스레드는 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미칠 수 있습니다.

  3. 동기화(Synchronization)
    스레드는 프로세스의 Cord, Data, Heap 영역을 공유하고 있습니다. 공유하는 자원에 동시에 접근했을 경우, 동기화가 원인이 되어 때때로 비정상적으로 동작할 수 있습니다.


동기화(Synchronization) 이슈

멀티 스레딩의 가장 큰 단점.
여러 스레드가 동일한 자원(데이터)에 접근해서 수정할 때 해당 이슈가 발생합니다.
동기화 문제가 일어날 수 있음을 항상 예상하고 방지해야 하기 때문에 스레드 프로그램은 코드를 짜거나 디버깅에도 까다롭습니다.

  • 계산 결과를 저장하는 순간에 컨텍스트 스위칭이 생긴다면?

해결 방안

한 스레드가 공유 변수를 갱신하는 동안, 다른 스레드가 동시 접근할 수 없도록 합니다.

  • 상호 배제(Mutual exclusion)

    • 임계 자원 Critical Resource - 동시에 읽고 쓰게 되는 데이터
    • 임계 영역 Critical Section - 동시에 읽고 쓰는 ‘코드 영역’
  • 세마포어(Semaphore)

    • Critical Section(임계 구역)에 대한 접근을 막기 위해 Locking 매커니즘이 필요
      • Mutex(binary semaphore)
        • 임계 구역에는 하나의 스레드만 접근 가능
      • Semaphore

번외, 교착 상태(Deadlock)과 기아 상태(Starvation)

교착 상태(Deadlock)

두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태.
프로세스, 스레드 둘 다 이와 같은 상태가 일어날 수 있습니다.

기아 상태(Starvation)

특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 기아 상태라고 합니다.
이를 에이징(Aging) 기법을 통해 해결하는데, 에이징 기법이란 시간이 지날수록 오래 대기한 프로세스의 우선 순위를 높이는 방식입니다.

교착 상태와 기아 상태

  1. 교착 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생
  2. 기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원 할당이 안 되는 경우를 주로 의미


Reference

① 잔재미 코딩의 컴퓨터 이론
② [얄팍한 코딩 사전] 프로세스는 뭐고 스레드는 뭔가요? https://www.youtube.com/watch?v=iks_Xb9DtTM
③ Benefits of Multithreading in Operating System https://www.geeksforgeeks.org/benefits-of-multithreading-in-operating-system/
④ 스레드(Thread) 개념, 사용이유, 프로세스와의 비교, 상태, 우선순위, 종류 https://beststar-1.tistory.com/6
⑤ 뮤텍스(Mutex)와 세마포어(Semaphore)의 차이 https://medium.com/@kwoncharles/뮤텍스-mutex-와-세마포어-semaphore-의-차이-de6078d3c453

0개의 댓글