프로세스와 스레드

김상진 ·2024년 11월 23일
0

CS

목록 보기
10/25

프로세스와 스레드란 무엇인가?

movie

프로세스

컴퓨터에서 실행 가능한 파일, 예를 들어 윈도우에서 이름 뒤에 .exe가 붙은 파일들을 우리는 프로그램이라고 부릅니다. 이 프로그램이 실행되어 어떤 일을 하고 있는 상태를 프로세스라고 합니다.

오늘날 컴퓨터를 쾌적하게 사용할 수 있는 이유는 운영체제가 여러 프로세스를 동시에 실행시키기 때문입니다. 윈도우 사용자라면 작업 관리자를 열어 현재 얼마나 많은 프로세스가 실행 중인지 확인할 수 있습니다. 이러한 다중 프로세스 실행 방식은 동시성(Concurrency), 병렬성(Parallelism), 혹은 이 둘의 혼합으로 이루어집니다.

동시성과 병렬성의 차이

  • 동시성: 프로세스 하나가 여러 작업을 조금씩 돌아가며 처리하는 방식입니다. 작업 간 전환을 컨텍스트 스위칭(Context Switching)이라고 하며, 이 과정은 매우 빠르게 이루어져 사용자에게는 여러 작업이 동시에 실행되는 것처럼 보입니다.
  • 병렬성: 멀티코어 프로세서를 사용하여 각 코어가 독립적으로 작업을 수행하는 방식입니다. 듀얼코어, 쿼드코어, 옥타코어 등은 이런 멀티코어 프로세서를 의미합니다.
    CPU의 속도가 발열 등의 물리적 제약으로 인해 예전만큼 빠르게 발전하지 못하게 되자, 코어를 여러 개 탑재해 작업을 분담하는 멀티코어 방식이 등장했습니다.

스레드

프로세스는 컴퓨터 자원을 나누어 사용하고, 각 프로세스 내부에서도 동시에 여러 작업이 필요할 때가 있습니다. 이 작업의 갈래를 스레드(Thread)라고 합니다.

예를 들어, 브라우저라는 프로그램이 동작하는 프로세스 안에서 다음과 같은 작업이 동시에 일어날 수 있습니다.

  • 파일 다운로드
  • 다른 페이지 탐색
  • 유튜브 영상 데이터 수신 및 재생

예를 들어, 햄버거를 만드는 프로세스를 생각해 봅시다. 패티를 굽는 작업과 빵에 야채를 얹는 작업은 각각의 스레드로 진행될 수 있습니다. 이 스레드들은 같은 조리대에서 작업하며, 효율적으로 자원을 공유합니다. 그러나 패티를 1번 조리대에서 굽고, 야채를 2번 조리대에서 얹는다면, 서로 다른 조리대를 사용하는 것보다 작업 효율이 떨어질 수 있습니다.

스레드는 같은 프로세스 내에서 자원을 공유하기 때문에 속도와 효율 면에서 유리하지만, 단점도 있습니다. 공유 자원을 사용하는 과정에서 여러 스레드가 동시에 접근하면 데이터 불일치나 충돌 문제가 발생할 수 있습니다. 따라서 스레드 간의 자원 공유는 효율적이면서도 신중한 관리가 필요합니다.


스레드와 동기화 문제

스레드가 자원을 공유하면 동기화 문제가 발생할 수 있습니다.
예를 들어, 버튼을 누를 때마다 숫자가 1씩 증가하는 프로그램에서 두 스레드가 동시에 버튼을 10번씩 누르면 결과는 20이 나와야 합니다. 그러나 동기화가 제대로 이루어지지 않으면 결과는 그보다 적게 나올 수 있습니다. 이는 두 스레드가 동시에 데이터를 변경하는 타이밍 문제로 발생합니다.

자바에서의 동기화 해결법

자바는 이러한 문제를 해결하기 위해 Synchronized 키워드를 제공합니다.
Synchronized는 여러 스레드가 동일한 자원에 접근할 때, 현재 자원을 사용하는 스레드만 접근을 허용하고 나머지 스레드의 접근을 막는 방식으로 동기화를 보장합니다.

Synchronized 사용법
  1. 메서드에서 사용하는 경우
public synchronized void method() {
    // 동기화된 메서드
}
  1. 객체 변수에 사용하는 경우(block문)
private Object obj = new Object();
public void exampleMethod() {
    synchronized (obj) {
        // 동기화된 블록
    }
}
주의점: Synchronized의 성능 저하

Synchronized 키워드는 남용할 경우 프로그램 성능을 저하시킬 수 있습니다.
자바 내부적으로 Synchronized는 block과 unblock 과정을 처리하는데, 이러한 작업이 빈번하면 오히려 성능이 낮아질 수 있습니다. 따라서 동기화가 꼭 필요한 부분에만 사용해야 합니다.


참고 및 참고자료
synchronized란?
프로세는 뭐고 스레드는 뭔가요?

profile
알고리즘은 백준 허브를 통해 github에 꾸준히 올리고 있습니다.🙂

0개의 댓글

관련 채용 정보