-> 프로세스는 프로그램 실행단위이며, 스레드는 프로세스 내에서 실행되는 흐름의 단위를 말합니다.
+ 프로세스와 스레드 둘의 차이는 무엇인가요?
이 둘의 가장 큰 차이점은 메모리 영역 할당의 차이입니다. 프로세스는 자신만의 고유 공간과 자원을 할당받는 반면, 스레드는 프로세스 내에서 스택을 제외한 코드, 데이터, 힙 메모리를 공유합니다.
※ 프로세스와 스레드 구조
프로세스는 프로세스 당 최소1개의 스레드를 소유
프로세스는 각각 별도의 주소 공간의 할당(독립적)
Code :코드 자체를 구성하는 메모리 영역(프로그램 명령)
Data :전역변수,정적 변수,배열 등(초기화된 데이터)
Heap :동적 할당 시 사용(new(), mallock()등
Stack :지역변수,매개변수,리턴 값(임시 메모리 영역)
+ 스택을 스레드마다 독립적으로 할당하는 이유는?
스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.
++ 자바 스레드란 : 자바에서는 프로세스가 존재하지 않고 스레드만 존재합니다. 스레드 스케쥴링은 JVM이 담당합니다.
+++ JVM(Java Virtual Machine)이란?: 자바 어플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것입니다. 메모리 관리, garbage collection을 수행하고 스택기반의 가상머신입니다.
Q4. 멀티 프로세스와 멀티 스레드의 장단점에 대하여 설명해주세요
-> 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 가지고 있습니다.
반면 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
때문에 대상 시스템의 특징에 따라 적합한 동작 방식을 선택하고 적용해야 합니다.
+
멀티 프로세스
멀티 스레드
장점
안전성(하나 프로세스 죽어도 다른 곳에 영향 안 끼침)
독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실 감소, heap, data 영역을 통해 데이터를 주고받을 수 있어 스레드 간 통신 방법이 훨씬 간단하다.
단점
각각 독립된 메모리 영역을 가지고 있어 멀티스레드보다 많은 메모리 공간, CPU차지 -> 작업량이 많을수록 오버헤드 발생, context switching으로 인한 성능 저하
안전성 문제(오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료 될 수 있다) -> critical section 기법을 통해 대비함
+ 멀티스레드에서 동기화를 하는 이유?
-> 멀티 스레드를 사용하는 프로그램에서 두 개 이상의 스레드가 공유 데이터에 접근할 때, 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤하기 위해 동기화가 필요합니다.
※ 이로 인해 병목 현상이 발생하여 성능이 저하될 가능성이 높기 때문에 과도한 락으로 병목현상을 줄여야 한다.
+ context switching가 무엇이고 이것이 필요한 이유는?
-> 현재 진행하고 있는 task(process, thread)의 상태를 저장하고 다음 진행할 task의 상태 값을 읽어 적용하는 과정을 말하고, 이것이 있어야 CPU가 task를 바꿔가며 실행할 수 있습니다.
++ process와 thread 중 context switching의 비용이 더 많이 드는 것은?
-> process, thread의 경우 stack 영역을 제외한 모든 메모리를 공유하기 때문에 context switching 발생 시 stack 영역만 변경을 진행하면 된다.
+ critical section(임계영역)이란?
-> 멀티 스레드 시 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정