프로그램
프로그램이란?
프로그램
실행 가능한 명령어의 집합이며 메모리에 올라가지 않은 정적인 상태
-
프로그램은 하드 디스크와 같은 저장장치에는 저장되어 있지만, 메모리에는 올라가지 않은 상태
-
즉, 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 : 백그라운드에서 스펠링 체크와 문법 체크