[프로세스와 스레드의 차이]
프로세스는 실행중인 프로그램을 의미한다. 스레드는 실행 제어만 분리한 것을 의미한다.
프로세스는 운영체제로부터 자원을 할당받지만, 스레드는 프로세스로부터 자원을 할당받고 프로세스의 코드/데이터/힙영역을 공유하기 때문에 좀 더 효율적으로 통신할 수 있다. 또한 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드쪽이 빠르다. 스레드는 자원 공유로 인한 문제가 발생할 수 있으니 이를 염두한 프로그래밍을 해야한다.
한 프로세스 안에 여러 개의 스레드가 생성될 수 있다.
[컨텍스트 스위칭]
컨텍스트 스위칭은 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법이다.
인터럽트가 발생ㅎ하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작한다. 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있다.
스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야하는 내용도 적기 때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있다.
[동기와 비동기의 차이]
동기 방식은 메서드 리턴과 결과를 전달받는 시간이 일치하는 명령 실행 방식이다. 동기 방식은 한 함수가 끝나는 시간과 바로 다음 함수가 시작하는 시간이 같다.
비동기 방식은 여러 개의 처리가 함께 실행되는 방식으로, 동기 방식에 비해 단위시간 당 많은 작업을 처리할 수 있다. 단 CPU나 메모리를 많이 사용해야하는 작업을 비동기로 처리하게되면 과부하가 걸릴 수 있다. 프로그램의 복잡도 또한 증가하게 된다.
[블로킹과 논블로킹]
동기와 비동기와는 다른 관점으로 내가 직접 제어할 수 없는 대상을 상대하는 방법에 대한 분류다.
블로킹 방식은 대상의 작업이 끝날 때까지 제어권을 대상이 가지고 있는 것을 의미한다. 반면에 논블로킹은 대상의 작업 완료여부와 상관없이 새로운 작업을 수행한다.
동기와 논블로킹은 계속해서 polling을 수행하기 때문에 컨텍스트 스위칭이 지속적으로 발생해 지연이 발생한다.
[멀티스레드 프로그래밍에 대한 설명]
멀티스레드 프로그래밍은 하나의 프로세스에서 여러 개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 멀티스레드 프로그래밍이라한다.
장점
단점
[Thread-safe]
두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산 결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미한다.
[프로세스 동기화]
다중 프로세스 환경에서 자원등에 한 프로세스만 접근가능하도록 하는 것이다.
프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재하기 때문에 주의해야한다.
[교착상태와 기아상태의 해결방법]
교착상태: 서로 다른 프로세스가 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 의미한다.
발생조건
해결방법
기아상태: 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스가 영원히 자원 할당이 되지 않는 경우
해결방법
[세마포어와 뮤텍스의 차이]
세마포어는 여러 개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식이다. 따라서 뮤텍스는 세마포어가 될 수 없다.
세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있다.
[가상 메모리]
실제 메모리에서 공간이 부족한 경우 보조 기억 장치에서 임시로 사용하는 영역
실제 메모리가 아니기때문에 지연시간이 많이 발생하며, 가급적이면 SWAP메모리를 사용하지 않도록 설계하는 것이 좋고, 만약 계속해서 사용하는 양이 증가한다면 메모리 누수를 의심해야한다.
[캐시의 지역성]
시간 지역성과 공간 지역성으로 나눌 수 있으며 시간 지역성은 최근에 접근한 데이터에 다시 접근하는 경향을 의미하고, 공간 지역성은 최근 접근한 데이터의 주변 공간에 다시 접근 경향을 의미한다.
[프로세스 관련 용어]