TIL 240322

hyeo71·2024년 3월 21일
0

2024 내배캠 AI 트랙

목록 보기
58/108

쓰레드

프로세스 vs 쓰레드

  1. 프로세스

    • 자신만의 고유 공간과 자원을 할당받아 사용
    • 메모리 상에서 실행중인 프로그램
    • 최소 하나의 쓰레드를 보유, 각각 별도의 주소공간을 독립적으로 할당 받음(code, heap, stack)
    • 프로레스는 다른 프로세스의 변수나 자료에 접근 X
    • 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process Communication: 프로세스 간 통신)을 사용
  2. 쓰레드

    • 다른 쓰레드와 공간과 자원을 공유하면서 사용
    • 프로세스 안에서 실행되는 흐름 단위
    • stack만 할당받고 나머지 영역은 쓰레드끼리 공유


쓰레드가 독립적으로 가지고 있는 부분(작업 흐름과 관련)

  • PC (실행할 명령어)
  • Register set
  • Stack Space

쓰레드가 공유하는 부분(작업 데이터와 관련)

  • Code Section
  • Data Section
  • OS Resources

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

  • 멀티 프로세스
    - 하나의 운영체제 안에서 여러 프로세스가 실행되는 것

  • 멀티 쓰레드
    - 하나의 프로세스가 여러 작업을 여러 쓰레드를 사용해 동시에 처리하는 것


쓰레드 풀

컴퓨터 프로그램에서 실행의 동시성을 달성하기 위한 소프트웨어 디자인 패턴

프로그램이 작업을 동시에 실행할 수 있도록 여러 쓰레드를 미리 생성해두고 유지 관리

-> 작업 처리에 사용되는 쓰레드를 제한된 개수만큼 정해 놓고, 작업 큐에 들어오는 작업들을 하나씩 쓰레드가 맡아 처리하는 기법

  • 여러 쓰레드를 동시에 만들어 병렬처리가 가능

쓰레드 풀의 동작

  1. 초기화: 쓰레드 풀의 크기, 최대 쓰레드 수, 작업 큐 등 매개변수 설정
  2. 작업 수신: 작업을 수신하고 처리할 준비
  3. 작업 수행: 작업 큐를 모니터링, 대기중인 작업을 가져와 처리
  4. 작업 처리: 작업을 가져와서 처리, FIFO
  5. 작업 완료 및 반환: 완료되면 해당 결과를 반환, 쓰레드는 대기 상태
  6. 작업 대기: 새로운 작업이 추가되면 쓰레드 풀의 쓰레드들은 대기 상태를 벗어나 작업을 가져와 처리
  7. 종료

쓰레드 풀을 사용하는 이유

  1. 프로그램 성능 저하를 방지하기 위해
  2. 다수의 사용자 요청을 처리하기 위해

장단점

장점

  • 쓰레드를 생성, 수거하는데 비용이 들지 않음
  • 쓰레드가 생성될 때 OS가 메모리 공간을 확보
  • 미리 만들어두기 때문에 초기비용이 들지만 이전 쓰레드를 재사용할 수 있어 시스템 자원을 줄일 수 있고, 쓰레드가 대기 상태이기 때문에 딜레이가 발생하지 않음

단점

  • 쓰레드를 너무 많이 생성했다가 사용하지 않으면 메모리 낭비가 심함

개선: Fork Join Thread Pool - 큰 업무를 작은 업무로 나누어 배분, 이후 취합(분할 정복 알고리즘과 비슷)

동시성 & 병렬성

동시성

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

병렬성

멀티 코어에서 멀티 쓰레드를 동작시키는 방식
한 개 이상의 쓰레드를 포함하는 각 코어들이 동시에 실행되는 성질

  1. 데이터 병렬성

    • 전체 데이터를 쪼개 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리
    • 서브 데이터는 멀티 코어의 수만큼 쪼개어 각각의 데이터들을 분리된 쓰레드에서 병렬 처리
  2. 작업 병렬성

    • 서로 다른 작업을 병렬 처리하는 것
    • 웹 서버: 각각의 브라우저에서 요청한 내용을 개별 쓰레드에서 병렬 처리

0개의 댓글