프로세스와 스레드

yoon__0_0·2024년 5월 8일
0

이어드림 수업

목록 보기
15/103

프로그램

프로그램이란?

프로그램
실행 가능한 명령어의 집합이며 메모리에 올라가지 않은 정적인 상태

  • 프로그램은 하드 디스크와 같은 저장장치에는 저장되어 있지만, 메모리에는 올라가지 않은 상태

  • 즉, cpu가 계산중이지 않음 (= ram에 올라가있지 않음)

  • 예시 ) 파워포인트 , python 스크립트 등
    -

  • 프로그램은 컴파일된 바이너리 이미지 형태거나 파이썬 스크립트 같은 인터프리터 형태로 존재함

  • 프로그램은 프로그래밍 언어를 기반으로 생성됨

프로그래밍 언어

프로그래밍 언어
컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식 언어

프로그래밍 언어의 종류

  • 고급언어
    • 사람이 이해하기 쉬운 언어
    • C, JAVA, Python 등이 존재
  • 저급언어
    • 컴퓨터가 이해하기 쉬운 언어
    • 기계어, 어셈블리어 등

고급언어 -> 저급언어 변환 방식

컴파일(compile)

컴파일
컴파일 언어로 작성된 소스코드(명령어) 전체를 저급언어(기계어)로 변환시키는 과정

  • 컴파일 언어 : 컴파일러에 의해 소스코드 전체가 저급언어로 변환되어 실행되는 고급언어 (C언어)
  • 컴파일러 : 컴파일을 수행해주는 도구
    • 컴파일러는 소스코드 전체를 훑어보며 문법오류, 실행가능 상태 확인 후 저급언어로 변환
    • 오류 발견시 컴파일 실패, 실행 불가
  • 소스코드 : 우리가 쓴 코드
  • 목적코드 : 컴파일러를 통해 저급 언어로 변환된 코드

인터프리터(interpreter)

인터프리터
인터프리터 언어의 소스코드를 한줄씩 저급언어로 변환하여 실행해주는 도구

  • 인터프리터 언어
    • 인터프리터에 의해 소스 코드가 한줄씩 실행되는 언어(python)
    • 인터프리터 언어는 소스를 한줄씩 실행하므로 소스코드 전체를 저급언어로 변환하는 시간을 기다릴 필요가 없음
    • n번째 오류가 있다면 n-1번째 줄 까지는 실행됨

컴파일 언어 vs 인터프리터 언어

  • 속도적 측면에서 컴파일 언어가 더 빠름
  • 인터프리터 언어가 코딩하기 더 편리함
  • 현재 컴파일 언어와 인터프리터 언어가 완벽히 구분되지는 않음
    • 자바의 경우에는 저급언어가 되는 과정에서 컴파일과 인터프리터를 동시에 수행
    • 파이썬은 인터프리터 언어지만 컴파일도 함

프로세스와 스레드

프로세스

프로세스
동적인 상태의 (실행중인) 컴퓨터 프로그램

  • ram에 존재함
  • 디스크에 있던 프로그램이 ram으로 실행되면 프로세스가 됨
  • 예시 : 우리가 파워포인트 프로그램을 클릭시 -> 프로세스 생성됨
  • 멀티프로세스 : 동일한 프로그램을 복제하여 프로세스를 여러개 생성할 수 있음.
  • 프로세스는 ram에 존재하고, 이는 작업관리자를 통해 확인가능

쓰레드 (thread)

thread
프로세스가 할당받은 자원을 이용하는 실행단위이자 프로세스내에서 실행되는 여러 흐름의 단위
즉, 하나의 프로세스 내에 있는 실행 흐름

  • 프로세스는 최소 한개 이상의 쓰레드를 가지고 이를 메인 쓰레드라고 함
  • 쓰레드는 독자적인 스택 메모리를 가짐
  • 프로세스는 쓰레드의 컨테이너로 불림. 즉, 프로세스는 쓰레드의 정보를 담고 있는 통에 불과함

Multi Thread
하나의 프로세스 안에 여러개의 스레드가 있는 것

  • 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리하도록 하는 행위가 가능함.
  • 특징
  • 코드, 데이터, 스택 영역을 제외한 나머지 자원을 서로 공유함.(프로세스보다 가벼움)
  • 공유 메모리(heap 등)에 대해 스레드간 자원을 공유가능 하므로 자원을 효율적 활용 가능

예시
1) 웹브라우저 띄울때
쓰레드 1 : 이미지와 텍스트를 보여주는 일
쓰레드 2 : 네트워크 상의 데이터를 가져오는 일

2) 워드 프로세스
쓰레드 1 : 화면상의 글자 보여주기
쓰레드 2 : 유저의 키를 입력
쓰레드 3 : 백그라운드에서 스펠링 체크와 문법 체크


profile
신윤재입니다

0개의 댓글