[CS, TIL] 230921 스레드와 동시성

CountryGirl·2023년 9월 21일
0

TIL

목록 보기
70/80

⚙️ 스레드 (Thread)

: 프로세스의 실행 가능한 가장 작은 단위

프로세스는 여러 스레드를 가질 수 O

⚙️ 단일 스레드 (Single Thread)

: 프로세스에서 프로세스는 하나의 스레드를 포함한다.

👍 장점

1. 문맥 교환 (context switch) 작업을 요구하지 X

  • 문맥 교환은 여러 개의 프로세스가 하나의 프로세서를 공유할 때 발생하는 작업

2. 자원 접근에 대한 동기화를 신경 쓰지 X

  • 여러 개의 스레드가 프로세스의 자원을 공유할 때, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근을 제어해야한다.

    모든 스레드가 동시에 같은 자원에 접근하거나 동일한 적업을 실행하려는 경우 에러를 발생시키거나 원하는 값이 나오지 않을 수 있기 때문

3. 단순히 CPU 만을 사용하는 계산 작업이라면, 더 효율적

  • 두 개의 작업을 하나의 스레드로 처리하는 경우 VS 두 개의 스레드로 처리하는 경우
    • 두 개의 스레드로 처리하는 경우, 두 개의 스레드가 짧은 시간 동안 번갈아가며 작업을 수행 ➡️ 동시에 두 작업이 처리되는 것처럼 느껴진다.

      하지만, 스레드 간의 작업 전환(context switching)에 소요되는 시간 때문에 두 개의 스레드로 작업한 시간이 때로는 하나의 스레드로 작업한 시간보다 더 오래 걸릴 수 O


4. 프로그래밍 난이도 easy / CPU, 메모리 적게 사용 ➡️ 비용 少

👎 단점

1. 여러 개의 CPU를 활용 X

  • 단일 스레드 환경에서는 하나의 CPU 코어만 사용

2. 연산량이 많은 작업을 하는 경우, 완료된 후에야 다른 작업 수행할 수 O

  • 작업을 순차적으로 처리하기 때문에 연산량이 많은 작업이 실행 중일 때 다른 작업을 처리할 수 X

3. 에러 처리를 못하는 경우 STOP

  • 단일 스레드 모델에서는 예외처리가 중요
  • 다중 스레드 모델에서는 하나의 스레드에서 발생한 에러가 다른 스레드에 영향을 미치지 않고 계속 실행 가능

⚙️⚙️ 다중 스레드 (Multi Thread)

: CPU 의 최대 활용을 위해 두 개 이상의 스레드가 동시에 실행되는 기술

👍 장점

1. 응답성 高

  • 프로그램의 일부분이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어 응답성이 증가

2. 경제성이 좋다.

  • 프로세스 내 자원들과 메모리를 공유하기 때문에 메모리 공간과 시스템 자원 소모 감소
    3. 멀리프로세서의 활용
  • 다중 CPU 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행 ➡️ 병렬성이 증가

👎 단점

1. context switching, 동기화 등의 이유로 싱글 코어 멀티 스레딩은 스레드 생성 시간이 단일 스레드보다 느리다.

2. 공유하는 자원에 동시에 접근할 경우, 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 의도하지 않은 값을 읽어오거나 수정할 수 O ➡️ 동기화 필요

프로세스와 달리 스레드는 데이터오 힙 영역을 공유하기 때문에

3. 운영체제의 지원 필요
4. 프로그래밍 난이도가 高 / 자원 사용 多



📌 동시성 (Concurrency)

: 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식

  • 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질
  • 동시에 실행되는 것처럼

📌 병렬성 (Parallelism)

: 멀티 코어에서 멀티 스레드를 동작시키는 방식

  • 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질
  • 물리적인 시간에 동시에 수행되는 것



✅ REFERENCE

gil0127.log : 싱글스레드(Single thread) vs 멀티스레드 (Multi thread)
jisoolee11.log : 스레드와 동시성

profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글