의외로 많이 헷갈려 하는 부분 [프로세스,쓰레드, 트랜잭션]

안희수·2021년 3월 19일
0

용어 정리 사전

목록 보기
5/5

서두

공부는 모른다는 것을 인지하고
받아들이는 시점에서 하는 것이라고 생각한다


현업에서 개발자로 있다보면
어렴풋이 별개의 것으로는 인지하고는 있지만
무엇이 정확히 어떻게 다른지 모르는 부분이 있는데

프로세스 (Process)
쓰레드 (Thread)
트랜잭션 (Transcation) 등이 있을 것이다
더 나아가면 뮤텍스 (Mutex)서비스 (Service)도 있다

어느 정도 경력이 있는 개발자라고 한다면
아니 경력 개발자가 그것도 모르냐고 하는 사람도 있을 것이다
하지만 본인은 그것을 모르고 사용하였고 명확하게 구분지어 설명할 수 없었다

그래서 조금 시간을 들여 이 글을 꾸준히 작성할 예정이며
확실하게 짚고 넘어갈 수 있는 계기가 될 수 있기를 바란다


프로세스

프로세스의 정의

  • 프로세스(process)
    컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.

    스케줄링의 대상이 되는 작업(task)과 거의 같은 의미로 쓰인다.

  • 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며
    동시에 여러 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.


작업관리자에서 보면 제일 먼저 나타나는 것이 바로 프로세스이다

응용 프로그램을 개발할 때 다른 응용프로그램을 호출하여
작업을 하는 경우가 종종 발생한다

대표적인 예시가 바로 엑셀을 사용하다 에러가 나는 경우이다
엑셀을 사용하던 중 예상치 못한 에러로 프로그램이 중단 될 경우
백그라운드에 프로세스가 남아 있어 열리지 않거나
접근할 수 없는 상황이 발생하곤 하는데
이 때 강제로 종료하는 방식을 Process Kill 이라 한다

프로그램과 프로세스의 차이

프로그램은 일반적으로 실행코드를 뜻하고,
프로세스는 메모리 상에서 실행되는 작업 단위를 지칭한다.

  • 하나의 프로그램을 여러 번 구동하면
    여러 개의 프로세스가 메모리 상에서 실행된다.

    이것을 방지하는 것이 바로 뮤텍스(Mutex)
    상호배제(mutual exclusion)이다


    뮤텍스로 지정된 프로그램은 임계구역 문제로
    중복 실행을 할수 없게 되는데 이를 원자적 연산이라고 한다


    뮤텍스와 세마포어는 튜링 동치의 관계이기 때문에
    종종 같이 엮여서 다니기도 한다

프로세스의 상태

  • 커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있으며
    커널은 이것들을 이용하여 프로세스의 상태를 관리한다.
  • 생성(create)
    프로세스가 생성되는 중이다

  • 실행(running)
    프로세스가 CPU를 차지하여 명령어들이 실행되고 있다

  • 준비(ready)
    프로세스가 CPU를 사용하고 있지는 않지만
    언제든지 사용할 수 있는 상태로,
    CPU가 할당되기를 기다리고 있다
    일반적으로 준비 상태의 프로세스 중
    우선순위가 높은 프로세스가 CPU를 할당받는다

  • 대기(waiting)
    보류(block)라고 부르기도 한다
    프로세스가 d입출력 완료, 시그널 수신 등
    어떤 사건을 기다리고 있는 상태를 말한다

  • 종료(terminated)
    프로세스의 실행이 종료되었다

프로세스의 전이

  • 디스패치(dispatch)
    준비 리스트의 맨 앞에 있던 프로세스가 CPU를 점유하게 되는 것
    즉 준비 상태에서 실행 상태로 바뀌는 것을 디스패치라고 한다

  • 보류(block)
    실행 상태의 프로세스가 허가된 시간을 다 쓰기 전에
    입출력 동작이 필요한 경우 CPU를 스스로 반납하는 것을 보류라고 한다

  • 깨움(wakeup)
    입출력 작업 종료 등 기다리던 사건이 일어났을 때
    보류 상태에서 준비 상태로 넘어가는 과정을 깨움이라고 한다

  • 시간제한(timeout)
    운영체제는 프로세스가 프로세서를 계속 독점해서
    사용하지 못하게 하기 위해 clock interrupt를 두어서
    프로세스가 일정 시간동안만 (시분할 시스템의 time slice)
    프로세서를 점유할 수 있게 한다

쓰레드

프로세스와 쓰레드의 비교

  • 프로세스(Process)
    • 컴퓨터에서 연속적으로 실행되고 있는 프로그램
    • 메모리에 올라와 실행되고 있는 프로그램으 인스턴스(독립적인 개체)
    • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
    • 동적인 개념으로 실행된 프로그램을 의미

  • 쓰레드(Thread)
    • 프로세스 내에서 실행되는 여러 흐름의 단위
    • 프로세스의 특정한 수행 경로
    • 프로세스가 할당반은 자원을 이용하는 실행의 단위

멀티 프로세싱 멀티쓰레딩이란 ?

멀티 프로세싱멀티 쓰레딩
하나의 응용 프로그램을 여러 개의 프로세스로 구성하나의 응용 프로그램을 여러 개의 쓰레드로 구성
장점프로세스 중 하나가 죽어도
다른 영향이 확산되지 않는다
시스템 콜이 줄어
자원을 효율적으로 관리할 수 있다

프로세스간의 통신보다 통신 비용이 적다

Context Switching이 빠르다

Stack 영역을 제외한
모든 메모리를 공유하여 통신 부담이 적다
단점Context Switching 오버헤딩이 발생한다

Context Switching가 발생하면
캐쉬를 모두 리셋하고 다시 불러와야 한다

프로세스들 사이의 변수를 공유할 수 없다
미묘한 시간, 잘못된 변수 공유로
오류 발생 확률이 증가한다

디버깅이 까다롭다

단일 프로세스에서는 효과를 기대하기 어렵다

자원 공유의 문제가 발생한다

하나의 쓰레드에 문제가 발생하면
전체 프로세스가 양향을 받는다

멀티쓰레딩과 멀테 테스킹의 차이

  • 멀티 프로세스

    [데이터 영역,힙,스택]영역 모두를 비공유

  • 멀티 쓰레드

    [데이터 영역,힙,스택]영역 중 스택 영역만 비공유

멀티쓰레딩과 멀티 프로세싱의 차이

멀티쓰레딩과 멀티 프로세싱의 동작원리

profile
9년차 소프트웨어 개발자 (2024년 재 개편 예정입니다)

0개의 댓글