Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

프로세스(Process)와 쓰레드(Thread)의 차이 본문

Computer Science

프로세스(Process)와 쓰레드(Thread)의 차이

ultra_dev 2023. 3. 31. 18:13

프로세스(process)란 간단히 말해 '실행 중인 프로그램'이다.
프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다

 

프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다.

 

스레드는 Code,Data 영역과 Heap 영역을 공유하고, Stack 영역은 각자 독립적으로 가지고 있다.

 


모든 프로세스에는 최소 하나 이상의 쓰레드가 존재하며,
둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스라고 한다.

멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것이 가능하다.

실제로 한 개의 CPU가 한 번에 단 한가지 작업만 수행할 수 있기 때문에 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 동시에 여러 작업이 수행되는 것처럼 보이게 하는 것이다. 그래서 프로세스의 성능이 쓰레드의 개수에 비례하지 않으며,


하나의 쓰레드를 가진 프로세스보다 두 개의 쓰레드를 가진 프로세스가 오히려 더 낮은 성능을 보일 수도 있다.

 

 

멀티쓰레딩의 장점

CPU의 사용률 향상
자원을 보다 효율적으로 사용
사용자에 대한 응답성 향상
작업이 분리되어 코드가 간결해짐

 

멀티쓰레딩의 단점

 

동기화 문제 발생 가능

->동기화를 위해 synchronized 키워드나 Lock, Condition 등의 동기화 기법을 사용

데드락 문제 발생 가능 

->밑에서 다루기

 


컨텍스트 스위칭(Context Switching)은 CPU가 여러 프로세스 또는 스레드를 번갈아 가며 실행하면서, 실행 중인 프로세스 또는 스레드의 상태(Context)를 저장하고, 다음 실행할 프로세스 또는 스레드의 상태를 읽어들이는 작업을 말한다.

컨텍스트 스위칭은 시스템 성능에 영향을 미치는 중요한 요소 중 하나다. 컨텍스트 스위칭이 자주 발생하면, CPU의 시간과 자원을 많이 소모하게 되어, 시스템 성능이 저하될 수 있다. 


  • 동시성: 하나의 코어에서 여러 스레드가 번갈아가며 실행, 여러 작업이 동시에 실행되고 있는 것처럼 구현되는 것
  • 병렬성: 멀티 코어에서 여러 스레드를 동시에 실행, 여러 작업이 실제로 동시에 실행되고 있는 것

 


ex)Mutli-Thread를 활용하는 인터넷 익스플로러는 창 여러개 키다가 하나가 오류 뜨면 나머지 전체가 꺼지는 경우가 있었으나 Multi-Process를 활용하는 크롬은 비효율적일 수 있어도 안정성이 더 뛰어남

 

 

Java 프로그래밍에서

  • 프로세스
    • 자바에서는 하나의 자바 프로그램이 하나의 프로세스를 갖는다.
    • 자바 프로그램이 실행되면, JVM(Java Virtual Machine)이 하나의 프로세스를 생성하고, 이 프로세스 내에서 자바 코드가 실행된다.
    • 각각의 자바 프로그램은 독립적인 메모리 영역을 가지며, 서로 영향을 주지 않는다.
  • 스레드
    • 자바에서는 하나의 프로세스 내에서 다수의 스레드를 생성할 수 있다.
    • 자바에서 스레드를 생성하려면, Thread 클래스를 상속받거나 Runnable 인터페이스를 구현해야 한다.
      • 주로 Runnable 인터페이스로 구현한다. -> Thread 클래스를 확장하는 클래스는 다른 클래스를 상속받을 수 없기 때문
    • 자바에서 스레드를 생성하면, 각 스레드는 자신만의 스택(Stack)을 가지고, 공통된 Heap 영역을 공유한다.
    • 자바에서 스레드 간의 동기화를 위해 synchronized 키워드같은 동기화 기법을 사용한다.
      • 따라서, 자바에서는 하나의 자바 프로그램이 하나의 프로세스를 갖고, 이 프로세스 내에서 다수의 스레드를 생성하여 코드를 실행한다. 각각의 스레드는 자신만의 스택을 가지고, 공통된 Heap 영역을 공유하며, 동기화 기법을 사용하여 스레드 간의 상호작용을 처리한다.

 

데드락

데드락이란, 교착상태를 말하고, 두 개의 쓰레드가 하나씩 자원을 소지하고 있으면서 상대방이 가진 자원을 서로 원하고 있는 상태를 말한다.

 

어떤 작업도 실행되지 못하고 계속 서로 상대방의 작업이 끝나기만을 바라는 무한정 대기상태이다.

 

데드락의 발생조건
교착상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립 할 때 발생한다.

따라서, 아래의 네가지 조건 중 하나라도 성립하지 않도록 만든다면 교착상태를 해결할 수 있다.

 

데드락 발생조건

 

교착상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립 할 때 발생한다.

따라서, 아래의 네가지 조건 중 하나라도 성립하지 않도록 만든다면 교착상태를 해결할 수 있다.

 

  • 상호 배제 (Mutual exclusion) - 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.
  • 점유대기 (Hold and wait) - 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
  • 비선점 (No preemption) - 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼앗을 수 없어야한다.
  • 순환 대기 (Circular wait) - 프로세스의 집합 {P0, P1, ,…Pn}에서 P0는 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2…Pn-1은 Pn이 점유한 자원을 대기하며 Pn은 P0가 점유한 자원을 요구해야 한다.

 

데드락 처리

  • 교착상태 예방 및 회피 - 교착 상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나 회피하는 프로토콜을 이용하는 방법
  • 교착상태 탐지 및 회복 - 교착 상태가 되도록 허용한 다음에 회복시키는 방법
  • 교착 상태 무시 - 대부분의 시스템은 교착 상태가 잘 발생하지 않으며, 교착상태 예방, 회피, 탐지, 복구하는 것은 비용이 많이 든다.



'Computer Science' 카테고리의 다른 글

웹서버와 WAS의 차이  (0) 2023.04.03
TCP / UDP  (0) 2023.03.31
Collection(List, Map, Set)  (2) 2023.03.30
parameter vs argument  (0) 2023.03.30
B-Tree  (0) 2023.03.29
Comments