본문 바로가기
개발 공부/개발 지식

프로그램 / 프로세스 / 스레드 / 멀티 스레드

by 코딩호야 2023. 7. 18.

1. 프로그램

  - 프로그램의 작업의 진행 계획이나 순서

  - 어떤 문제를 해결하도록 컴퓨터에 주어지는 자료처리 방법과 순서를 기술한 명령문

 

2. 프로세스

  -  운영체제에서 실행 중인 하나의 애플리케이션을 말한다

  -  사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행한 다.

  - 이때 실행되는 애플리케이션을 "프로레스" 라고한다.

  - 정리하면 프로그램(파일) 을 마우스로 더블 클릭으로 실행 시켰을 때, 이 실행되고 있는 프로그램을 프로세스라고 한다.

  - 프로그램은 여러개의 프로세스로 만들기도한다.

  - 예를 들어 브라우저 두 개 실행하면, 두개의 프로세스가 생성된다. 이렇게 하나의 애플리케이션은 여러 프로세스를 만들 기도 한다.

 

 

  3. 스레드 ( 사전적 의미 : 실 )

    -  스레드는 프로세스 안에서 한가지 작업을 실행하기 위해 순차적으로 실행되는 하나의 흐름이다.

    -  한가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름.

    -  하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에, 한 프로세스 내에서 스레드가 두개라면 실행되는 흐름이  두개 생긴다는 의미이다.

    - 스레드는 각자 자신의 Stack 영역을 보유한다.

    - 스레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.

4. 싱글 스레드 ( 한개의 실 )

   -  싱글 스레드란 하나의 프로그램에서 동시에 하나의 코드만 실행할 수 있다는 뜻이다.

   -  싱글 스레드란 코드가 실행되서 끝난 지점과 다음 코드의 시작 지점이 연결된 형태이다.

   -  각 스레드는 한번에 하나의작업만 수행 가능하다.

   -  각 작업은 순차적으로 실행된다. ( 다음 작업을 시작하기 전에 이전 작업을 완료해야한다.)

         A -> B -> C

 

5. 멀티 스레드 ( 여러개의 실 )

   -  하나의 프로세스 내에서 여러개의 스레드로 자원을 공유하며 작업을 나누어 실행하는 것이다.

 

   장점 

-  시스템 자원 소모 감소 ( 자원 효율성 증가 )

   . 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.

 

-  시스템 처리율 향상 ( 처리비용 감소 )

   . 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.

   . 스레드 사이 작업량이 작아 Context Switching이 빠르다. ( 캐시 메모리를 비울 필요 X )

-  간단한 통신방법으로 프로그램 응답시간 단축

    . 스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기 때문에 통신비용이 적다.

    . 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.

 

   단점

- 자원을 공유하므로써 동기화 문제가 발생할 수 있다.

- 주의 깊은 설계가 필요하고 디버깅이 어렵다. ( 불필요한 부분까지 동기화하게되면, 대기시간으로 성능저하 발생 )

- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.

- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.

'개발 공부 > 개발 지식' 카테고리의 다른 글

Nginx 란?  (0) 2023.07.18
자주 쓰는 Linux 명령어  (0) 2023.07.18
Eclipse에서 xml파일의 쓰임새  (2) 2023.04.18
데이터베이스 샤딩이란?  (1) 2023.04.17
배치 ( Batch ) 와 스케줄러 ( Schduler ) Feat. Quartz  (0) 2023.04.17