1. 프로세스와 스레드의 차이를 설명해보세요
•
프로세스는 실행중인 프로그램을 말합니다.
•
한 프로세스 안에는 여러개의 스레드가 생성될 수 있는데요
•
프로세스를 자원과 제어로 구분할 수 있는데 스레드는 실행 제어만 분리한것을 말합니다.
•
프로세스는의 코드/데이터/힙 영역을 스레드끼리 공유하기 때문에 더 효율적으로 통신할 수 있습니다.
•
또한 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드쪽이 빠릅니다.
•
하지만 스레드는 자원공유로 인해 문제가 발생할 수 있으니 이를 염두해 둔 프로그래밍을 해야합니다.
2. 컨텍스트 스위칭에 대해 설명해보세요
•
여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록하는 방법입니다.
•
인터럽트가 발생하면 현재 프로세스 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다.
•
3. 동기와 비동기의 차이/ 장단점에 대해 설명해보세요
•
동기은 요청과 결과가 동시에 일어나는 방식입니다.
•
요청을하면 시간이 얼마나 걸리던지 그 자리에서 결과를 받습니다.
•
설계가 매우 간단하고 직관적이지만 결과가 주어질때까지 대기를 하고있어야한다는 단점이 있습니다.
•
비동기는 요청과 결과가 동시에 일어나지 않는 방식입니다.
•
요청을 하면 시간이 얼마나 걸리던지 다른 작업을 할 수 있습니다.
•
결과가 올때까지 다른 작업을 할 수 있다는 장점이 있지만 설계가 동기보다는 복잡합니다.
4. 멀티스레드 프로그래밍에 대해 설명해보세요
•
하나의 프로세스에 여러개의 스레드가 만들어 자원의 생성과 관리를 하는 것이 멀티스레드 프로그래밍입니다.
•
멀티 프로세스에 비해 메모리 자원소모가 줄어들며 컨텍스트 스위칭이 빠릅니다.
•
하지만 힙 영역에 있는 자원을 사용할 때는 동기화를 해야합니다.
•
동기화를 위해 락을 과도하게 사용하면 성능이 저하될 수 있습니다.
•
또한 하나의 스레드가 비정상적으로 동작하면 다른 스레드도 종료될 수 있습니다.
5. Thread-safe 하다는 의미와 설계하는 법은
•
두 개 이상의 스레드가 같은 객체에 동시에 접근해도 연산결과의 정합성이 보장될 수 있도록 메모리 가시성이 확보된 상태를 의미합니다.
•
java.util.concurrent 패키지의 하위 클래스를 사용
•
인스턴스 변수를 두지 않음(stack 영역에 존재하는 인스턴스 변수)
•
동기화 블럭에서 연산을 수행
6. 프로세스 동기화에 대해 설명해보세요
•
프로세스 스레드 간 공유자원에 대한 일치한 정보를 갖는것