Computer Science 4강

김형빈·2024년 4월 18일
0

Computer Science

목록 보기
3/3

쓰레드

프로세스와 쓰레드의 차이점

  • 프로세스: 자신만의 고유 공간과 자원을 할당받아 사용

    • 프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 쓰레드는 이 프로세스 안에서 실행되는 흐름 단위
    • 프로세스는 최소 하나의 쓰레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다
  • 쓰레드: 다른 쓰레드와 공간과 자원을 공유하면서 사용

    • 쓰레드는 프로세스안에서 작업을 처리하는 주체

    • 쓰레드는 자원 중에 stack만 따로 할당받고 나머지 영역은 쓰레드끼리 공유한다 (Code, Data, Heap)

멀티 프로세스와 멀티 쓰레드

멀티 프로세스

  • 장점
    • 하나의 프로세스가 죽어도 다른 프로세스에는 영향을 끼치지 않음
  • 단점
    • 작업량이 많을수록 오버헤드가 발생하고 문맥 교환(Context Switching)으로 인한 성능 저하를 유발
    • 프로세스 사이의 통신이 복잡 (IPC)

멀티 쓰레드

- 장점 - 자원의 효율성 - 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어서 자원을 효율적으로 관리할 수 있음 - 응답 시간 단축 - 쓰레드 간 데이터를 주고 받는 것이 간단해져 시스템 자원 소모가 줄어든다 - 처리 비용 감소 - 쓰레드 사이의 작업량이 작아 쓰레드 간 Context Switching이 활발하게 일어난다. - 단점 - Thread-Safety에 문제가 없는 지 확실한 설계가 필요 - 디버깅이 까다로움 - 동기화나 교착 상태가 발생할 수 있음 - 프로세스 밖에서(다른 프로세스에서) 해당 쓰레드를 제어할 수 없음 - 하나의 쓰레드에 문제가 발생하면 프로세스 전체가 영향을 받음

쓰레드 풀

쓰레드 풀이란?

  • 작업 처리에 사용되는 쓰레드를 제한된 개수만큼 정해 놓고 작업 큐(Queue)에 들어오는 작업들을 하나씩 쓰레드가 맡아 처리하는 것을 말한다
  • 쓰레드 풀의 동작
    1. 초기화
      • 쓰레드 풀의 크기, 최대 쓰레드의 수, 작업 큐 등의 매개변수를 설정한다
    2. 작업 수신
      • 작업을 수신하고 처리할 준비를 한다
      • 일반적으로 작업 큐에 추가된다
    3. 작업 수행
      • 미리 생성된 쓰레드들이 작업 큐를 모니터링하고 대기 중인 작업을 가져와 처리한다
      • 이 때 쓰레드 풀 내의 쓰레드 들은 일반적으로 무한루프를 돌면서 작업을 가져오기 위해 대기한다.
    4. 작업 처리
      • 쓰레드가 작업을 가져와서 처리한다
      • 작업은 일반적으로 작업 큐에서 FIFO(선입선출) 방식으로 가져온다
    5. 작업 완료 및 반환
      • 작업이 완료되면 해당 결과를 반환한다
      • 이 후 쓰레드는 다시 작업 큐에서 새로운 작업을 가져오기 위해 대기 상태로 돌아간다
    6. 작업 대기
      • 작업 큐에 새로운 작업이 추가되면 쓰레드 풀의 쓰레드들은 대기 상태를 벗어나 작업을 가져와 처리한다
      • 위를 반복하여 계속적으로 작업을 수행한다
    7. 종료
      • 쓰레드 풀을 더 이상 사용하지 않을 때 종료한다
      • 종료할 때는 모든 작업이 완료되었는지 확인하고, 필요에 따라 남은 작업들을 처리하거나 버릴 수 있다.

쓰레드 풀을 사용하는 이유

  1. 프로그램 성능 저하를 방지하기 위해
    • 매번 발생하는 작업을 병렬처리하기 위해 쓰레드를 생성/수거하는 데 따른 부담은 프로그램 전체적인 퍼포먼스를 저하시킨다
    • 따라서 쓰레드풀을 만들어 놓고 사용한다
  2. 다수의 사용자 요청을 처리하기 위해
    • 특히 Bottle Neck 현상이 발생하는 I/O 작업과 데이터베이스 작업에서 주로 사용된다

쓰레드 풀의 단점

  • 쓰레드 풀에 쓰레드를 너무 많이 생성해 두었다가 사용하지 않으면 메모리 낭비가 발생한다
  • 해결책
    • Fork Join Thread Pool

동시성과 병렬성

동시성

  • 싱글 코어에서 멀티 쓰레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러 개의 쓰레드가 번갈아가면서 실행되는 성질
  • 싱글 코어의 멀티 태스킹은 각 쓰레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가면서 조금씩 실행되고 있는 것이다

병렬성

멀티 코어에서 멀티 쓰레드를 동작시키는 방식으로, 한 개 이상의 쓰레드를 포함하는 각 코어들이 동시에 실행되는 성질
  • 데이터 병렬성
    • 전체 데이터를 쪼개 서비 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리하여 작업을 빠르게 수행하는 것을 말함
    • 서브데이터는 멀티 코어의 수만큼 쪼갠다
  • 작업 병렬성
    • 서로 다른 작업을 병렬 처리하는 것
    • Ex) 웹 서버, 각각의 브라우저에서 요청한 내용을 개별 쓰레드에서 병렬로 처리한다
profile
The secret of getting ahead is getting started.

0개의 댓글