프로그램? 프로세스? 스레드?

정종화·2021년 12월 9일
0
post-thumbnail

프로그램이란?

  • 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합.
  • 컴퓨터에서 어떠한 작업을 위해 실행할 수 있는 '정적인 상태'의 파일.
  • 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은(아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았다는 뜻) 정적인 상태.

프로세스란?

  • 프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 '프로세스'가 된다. 즉 프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 '실행중인 프로그램'.
  • 프로그램이 실행되서 돌아가고 있는 상태, 컴퓨터에서 연속적으로 실행되고 있는 '동적인 상태'의 컴퓨터 프로그램.

스레드란?

  • 프로세스가 할당 받은 자원을 이용하는 실행 단위이자, 프로세스의 특정한 수행 경로 그리고 프로세스 내에서 실행되는 여러 흐름의 단위이다. 즉 스레드는 프로세스 내에서 프로세스의 자원을 이용해서 실제로 작업을 수행하는 일꾼.
  • 프로세스는 최소 한 개 이상의 스레드를 가지며 이 스레드를 메인 스레드(main thread)라고 한다.

프로세스와 스레드의 차이?

  • 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당 받는데 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해주는데 이처럼 각각의 독립된 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

  • 하지만 스레드는 메모리를 서로 공유할 수 있어서, 각각의 스레드는 별도의 스택을 가지고 있지만 Heap 메모리는 서로 공유해서 읽고 쓸 수 있게 되기에 이러한 차이점이 있다.

  • 그러므로 프로세스의 경우 실행 중 오류가 발생해 강제 종료가 된다면 다른 프로세스에 어떠한 영향도 주지 않지만 스레드의 경우엔 하나의 스레드가 오류로 인해 강제 종료된다면 다른 스레드도 모두 강제 종료가 된다.

싱글스레드란?

  • 하나의 프로세스에서 하나의 스레드가 실행되는것을 의미.

싱글스레드의 장점?

  • 자원 접근에 대한 동기화를 신경쓰지 않아도 된다. 여러개의 스레드가 공유된 자원을 사용할 경우, 각 스레드가 원하는 결과를 얻게 하려면 공용 자원에 대한 접근이 통제되어야 하는데, 이 작업은 프로그래머에게 많은 노력을 요구하고 많은 비용을 발생시킨다. 하지만 단일 스레드 모델에서는 이러한 작업이 필요하지 않다.

싱글스레드의 단점?

  • 두개의 작업을 하나의 스레드로 진행하는 경우와, 두개의 작업을 두개의 스레드로 진행하는 경우, 둘의 진행 속도가 다르다. 보통은 후자가 더 빠르기 때문에 싱글스레드로 두개의 작업을 하는 경우 속도면에서 단점이 있을 수 있다. 다만 간혹 오히려 두개의 스레드로 작업을 할 경우 하나의 스레드로 작업한 경우보다 시간이 더 걸리는 경우도 있는데, 이는 스레드간의 작업전환에 시간이 걸리기 때문이다.

멀티스레드란?

  • 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것을 의미.

멀티스레드의 장점?

  • 새로운 프로세스를 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르다.
  • 프로세스의 자원과 상태를 공유하여 효율적으로 운영이 가능하다.
  • 프로세스의 작업전환보다 스레드의 작업전환이 더 빠르다.

멀티스레드 단점?

  • 하나의 스레드만 실행중일 때는 실행시간이 오히려 지연될 수 있다.
  • 멀티 스레딩을 위해 운영체제의 지원이 필요하다.
profile
Hello?

0개의 댓글