프로세스와 스레드

JunMyung Lee·2021년 6월 21일
0

개발지식

목록 보기
4/14

개발을 하며 가장많이 듣는 단어들인 프로세스, 스레드가 정확히 어떠한 일은 하는지, 또한 어떠한 차이가 있는지
설명을 하려고 하면 막막하다. 해서 해당 역할이 무엇인지, 어떠한 차이가 있는지 알아본다.
해당 설명을 위해 찾아본 주소는 다음과 같다.

raejoonee님 블로그(프로세스와 스레드의 차이)

  • CPU 입장에서는 스레드가 최소 작업 단위
  • 운영체제 입장에서는 프로세스가 최소 작업 단위

Process & Thread

Process

운영체제로부터 자원을 할당받은 작업의 단위, 프로그램이 실행되는 순간, 해당 파일은 컴퓨터 메모리에 올라가게 되고 동적인 상태가 된다.
이 상태의 프로그램을 프로세스라고 한다.

Thread

프로세스가 할당받은 자원을 이용하여 실행하는 흐름의 단위, 프로세스 특성의 한계를 해결하기 위해 더 작은 실행 단위 개념이 필요 하게 되었다.
이 개념을 쓰레드라고 하며, 프로세스 코드의 정의된 수행경로에 따라 동작한다. 즉, 쓰레드는 프로세스 안에 포함되어 있는 완전히 다른 개념이다.

Thread의 특징

쓰레드는 프로세스와 다르게 쓰레드간 메모리를 공유하며 작동한다. 즉, 쓰레드끼리의 자원 공유는 프로세스 실행의 일부가 된다. 일반 Java의 main함수도 쓰레드의 종류이다. ( 보통 메인쓰레드라고 부른다. )

Process와 Thread의 영향 차이

  • process : 한프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면, 특정 파일을 공유하지 않는 이상 영향을 주지 않는다.
  • thread : Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 쓰레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 모든 쓰레드가 강제 종료된다. (단, Stack 영역은 공유하지 않는다)

Multi Thread

그렇다면 멀티쓰레드는 무엇일까?
멀티태스킹이 하나의 운영체제 안에서 여러 프로세스가 실행되는 것이라면, 멀티쓰레드는 하나의 프로세스가 여러 쓰레드를 사용하여 동시에 처리하는것을 의미한다. 위의 서술한것과 마찬가지로 Stack영역을 제외한 영역을 공유하고 있으므로 응답시간이 빠르고, 메모리 자원을 절약할 수 있다.
단, 조심할 수 밖에 없는 단점이 있는데 그 이유로는 다음과 같다.

  • 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생한다.

프로젝트 개발을 할때, 기본적으로 "Thread safe하는가, 안하는가"에 대해 생각을 하고 개발을 해야할 경우가 있다.
예) 단순 예로 문자열처리 관련 로직을 개발

  • Thread safe StringBuffer
  • Thread non safe StringBuilder

단일 쓰레드일 경우, StringBuffer를 사용하는 경우보다, StringBuilder를 사용하는것이 효율적이며 직관적이다.
멀티쓰레드를 통하여 개발을 진행하는데 static으로 선언한 HashMap을 사용하는경우, 문제가 발생하게 된다.
멀티쓰레드를 하지 않을 때는 속도의 차이만 있을 뿐이지만, 멀티쓰레드를 할때 잘못 개발을 하게되면 프로세스는 심각한 오류를 가진채로 수행이 되므로 조심히 다루어야 한다.

profile
11년차 검색개발자 입니다. 여러 지식과 함께 실제 서비스를 운영 하면서 발생한 이슈에 대해서 정리하고 공유하고자 합니다.

0개의 댓글