EunGyeongKim

동시성 프로그래밍(Concurrency programming) 본문

기타 컴퓨터/병렬 프로그래밍

동시성 프로그래밍(Concurrency programming)

EunGyeongKim 2023. 8. 9. 19:40

동시성과 병렬성

  • 동시성(concurrency)
    • 멀티테스킹
    • 일을 잘게 분할 한 후 이를 조금씩 번갈아 가면서 처리하는 방식
      시간T0T1T2T3T4T15
      A0B0C0A1B1C3
    • 아주 빨리 번갈아 하면 동시에 처리하는것처럼 보임
  • 병렬성(patallelism)
    시간코어0코어1코어2코어3
    T0A0B0C0D0
    T1A1B1C1D1
    T2A2B2C2D2
    T3A3B3C3D3
    • 진짜 동시에 여러 개의 일을 처리하는것
    • 물리적은 코어의 개수에 제한이 있음
      • 작업이 I/O위주라면 동시성을 사용하는 편이 유리함
        • 왜냐면 I/O 작업은 실제로 CPU가 처리해야 하는 시간이 상대적으로 적으며 대부분 대기하는데 소모함.

동시성 프로그래밍

프로세스와 스레드

  • 프로세스
    • 프로그램이 메모리 위에 올라가서 실행중인 것
    • 코드를 실행할 수 있는 공간
      • CPU, 메모리, SSD와 같은 컴퓨터 자원 등
    • 프로세스는 최소 하나 이상의 스레드를 가짐. 경우에 따라서 여러 스레드를 가
  • 스레드
    • 프로세스 안에서 실행하고 있는 작업
    • 스레드 : 프로세스의 실행단위
    • 데몬 스레드
      • 메인 스레드가 종료될 때 자신의 실행 상태와 상관없이 종료되는 서브 스레드
  • fork
    • 메인스레드가 서브 스레드를 생성하는것
  • join
    • 모든 스레드가 작업을 마칠때까지 기다리는것을 의미
  • 루틴(routine)
    • 함수()를 호출할 때 호출하는 쪽
  • 서브루틴(subroutine)
    • 함수()를 호출할 때 호출된 함수
  • 코루틴(coroutine)
    • 기존의 함수와 달리 함수를 호출하는 쪽인 루틴에 종속적이지 않고 협동이 가능함.
Comments