-
[기술면접 OS] 프로세스와 스레드의 개념과 차이점취업준비/기술면접 2022. 9. 19. 19:23
프로세스(process)란
프로세스란 간단히 말해 '실행 중인 프로그램(program)'이다. 프로그램을 실행하면 OS로 부터 실행에 필요한 자원(메모리)을 할당 받아 프로세스가 된다. 즉) 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말하며, 종종 스케줄링의 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 쓰인다.
프로세스 = 프로그램 + 프로세스제어블록이며 프로세스는 각각 독립된 메모리 영역 (Code, Data, Stack , Heap의 구조)을 할당받는다.
스레드(thread)란
쓰레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 즉 쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)과 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.
하나의 프로세스는 하나 이상의 스레드를 갖는다. 즉) 프로세스 내에서도 처리 흐름이 여러개가 될 수도 있다.
스레드는 빠른 프로세스를 생성할 수 있고, 적은 메모리를 사용하며 정보 공유가 쉽다는 장점이 있다. 그러나 교착 상태에 빠질 수 있다는 단점도 있다.
더보기교착상태(데드락)이란 ?
프로세스가 자원을 얻지 못해 다음 작업을 못하는 상태.
즉) 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 형상
데드락 발생 조건
1. 상호배제 : 한 번에 한 개의 프로세스 만이 자원 공유 가능
2. 점유와 대기 : 최소한 하나의 자원을 점유하고 있으며 다른 프로세스에 할당 되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
3. 비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
4. 환형대기 : 공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들은 원형으로 구성되어 있다.
멀티 스레드는 두 가지 이상의 작업을 동시에 실행할 수 있어 자원을 효율적으로 사용할 수 있다. 멀티 스레드를 구현하는 방법은 2가지가 있다.
1. Thread 클래스 상속, 단일 상속만 가능
class MyThread extends Thread { public void run() { 작업내용 // Thread 클래스의 run()을 오버라이딩 } }
2. Runnable 인터페이스 상속, 다중 상속 가능
public class Test2 implements Runnable { @Override public void run() { // 작업내용 } }
여기서 Runnalbel은 run 메서드만 정의되어 있는 간단한 인터페이스이다. 쓰레드를 이용한다는 것은 위의 2가지 방법을 이용해 run() 메서드의 몸통을 채워주는 것이다.
멀티 프로세스와 멀티 스레드의 차이 - 멀티 프로세스
멀티 프로세싱이란? 하나의 응용프로램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
장점 단점 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다. Context Switching에서의 오버헤드
Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이의 공유 메모리가 없어 Context Switching가 발생하면 캐쉬에 있는 모든 데이터를 리셋하고 다시 캐쉬 정보를 불러와야한다.더보기Context Switching란?
CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정을 말한다. 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.
멀티 프로세스와 멀티 스레드의 차이 - 멀티 스레드
멀티 스레딩이란 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다. 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.
장점 단점 시스템 자원 소모 감소로 자원의 효율성을 증대한다.
시스템 처치량이 증가하며 처리 비용이 감소한다.
간단한 통신 방법으로 인한 프로그램 응답 시간이 단축된다.주의 깊은 설계가 필요하며 디버깅이 까다롭다.
다른 프로세스에서 스레드를 제어할 수 없다. ( 프로세스 밖에서 스레드 각각을 제어할 수 없다.)
멀티스레드의 경우 자원 공유의 문제가 발생한다. (동기화)스레드가 메모리를 공유함으로써 생기는 프로세스와의 차이점
- 동시에 여러 작업을 할 때, 멀티 스레드가 시스템 자원을 더 적게 사용한다.
- 프로세스는 메모리 공유를 하지 않으므로, 프로세스간 통신은 스레드간에 비해 복잡하다.
- 스레드의 경우 공유 자원에 대한 동기화(synchronize)이슈가 발생할 수 있다.동시에 여러 작업을 할 때 멀티 스레드를 사용하는 것이 멀티 프로세스보다 시스템 자원(메모리)를 더 적게 사용한다. 즉) 프로그램을 여러 개 키는 것 보다 하나의 프로그램 안에서 여러 작업을 해결하는 것이 효과적인 것이다. 특히 멀티 프로세서 환경(듀얼코어 이상의 CPU)에서는 효과가 더욱 증대된다. 한편, 스레드간 통신은 공유 메모리(Heap 영역)을 통해 가능하다. 하지만 프로세스는 서로 통신하려면 IPC(Signal, Pipe, Socket)등의 기술을 사용해야한다.
이렇게만 봤을 땐 스레드가 월등히 뛰어나보이지만 그렇지만은 않다. 단점이 존재하는데 그게 바로 동기화이슈이다. 만약 스레드1이 공유 자원 내의 어떤 데이터를 조작하다가, 스레드2에 제어권을 넘겨준 후 이후 스레드2가 그 데이터를 변경한다면 스레드1이 다시 제어권을 받아 남은 작업을 계속할 때 원치 않은 결과가 나올 수 있다.
예를들어 같은 계좌에서 돈을 인출하려고 할 때 a가 50달러를 인출한 이후 돈이 감소되기 전에 b가 60달러를 인출한다면? 잔고가 50만원이라고 가정했을때 큰일나는 것이다. 그래서 다른 사람(스레드)가 자원에 접근하지 못하도록 Lock을 걸어야 한다.
자바 스레드(Java Thread)란?
일반 스레드와 거의 차이가 없으며, JVM이 운영체제의 역할을 한다. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다. 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어지며 스레드 관련 많은 정보들도 JVM이 관리한다.
반응형'취업준비 > 기술면접' 카테고리의 다른 글
[기술면접 Spring] Filter, Interceptor, AOP 차이점 (1) 2022.09.20 [기술면접 JAVA] 캡슐화와 은닉화의 차이점 (0) 2022.09.19 [기술면접] 신입 개발자 JAVA 예상 면접 질문 (1) 2022.09.19 [기술면접 JAVA] 클래스변수와 인스턴스변수 차이점, static 키워드 (1) 2022.09.13 [웹개발 기술면접] 모델1, 모델2와 MVC 패턴 알아보기 (0) 2022.09.13