1. 프로세스 / 스레드 차이 설명하시오
프로세스는 메모리에 로드된 프로그램의 인스턴스 / 스레드는 프로세스 내의 실행 단위
프로세스가 다른 프로세스에 접근하려면 IPC 통신을 사용해야 하지만
스레드는 다른 스레드와 stack 영역을 제외한 메모리 영역을 공유하여 이 부분에서 다른 통신 과정이 (프로세스와 차이점)
이 부분에서는 스레드가 매우 효율적이라고 할 수 있음
IPC 통신 : 여러 프로세스 간에 데이터를 주고받는 방법을 통칭하는 용어
즉, 서로 다른 프로그램들이 서로 정보 공유하고 소통할 수 있도록 해주는 기술
IPC의 특징 :
1. 멀티태스킹 - 요즘 운영체제는 대부분 멀티태스킹 환경을 지원하기 때문에, 그 과정에서 정보를 공유하고 소통하기 위한 IPC 통신 필요함
2. 분산 시스템 - 여러 컴퓨터가 하나의 시스템처럼 작동하는 환경을 일컬음. 이러한 환경에서도 서로 다른 컴퓨터에서 실행되는 프로그램들이 하나의 시스템처럼 정보 공유 및 소통 챠챡챡 이뤄져야하기에 IPC 통신 필요
2. PCB가 뭔지 설명하시오
Process Control Block의 약자
프로세스에 대한 정보를 저장하고 있는 자료구조 단위.
프로세스의 pid, 메모리 정보, 프로세스 상태 정보, cpu 스케줄링 정보를 담고 있음
3. context-switiching이 뭔지 설명하세요
지금 실행되고 있는 프로세스나 스레드의 상태를 저장하고 새로운 프로세스나 스레드를 cpu에 적재하는 행동을 뜻함
이 작업이 많아지면 cpu 부하때문에 생기는 딜레이보다, 작업을 갈아타면서 생기는 딜레이가 커지는 성능 저하 현상이 발생할 수 있음
4. 멀티 스레드 장/단점
장점 : 멀티 프로세스에 비해서 스레드 끼리는 메모리 영역 공유(stack 제외)를 하기 때문에 메모리 절약 가능 & IPC 같은 복잡한 통신 기법 필요 x
단점 : 메모리 영역을 공유하기 때문에 하나의 스레드의 문제가 전체로 퍼질 가능성 있음, 메모리 영역의 동기화 문제가 발생할 수 있기 때문에 설계에 있어서 어려움과 디버깅할 때 여간 까다로운 게 아님
5. 동기와 비동기 차이점
차이점 : 하나의 펑션 함수의 수행 과정의 완료 여부를 신경쓰는지로 동기와 비동기로 갈림
프로그램을 짤 때, 함수를 호출하곤 하잖아요? ex. func();
동기 : func(); 함수 실행 > 함수 안의 로직 수행 > 리턴값 출력으로 마무리가 되는 일련의 과정의 완료 여부을 기다리는 것 : 비동기 : func() 함수 실행 > func(); 함수의 일련의 과정이 완료되는지를 기다리지않고 걍 그 다음 함수를 향해 슝 지나감
동기식을 쓰는 경우 : 함수가 실행된 후 나오는 리턴값을 가지고 또 다른 함수를 실행하거나 해야할 때.. 리턴값을 어쩔 수 없이 기다리는 거임..
ex. 버스를 탈 때 현금을 낸 후, 거스름돈을 기다리는 행위.. 돈을 내고 좌석을 향해 바로 돌진할 수 없는 거임..거스름돈을 받아야하기 때문에...
비동기식을 쓰는 경우 :
ex. 버스를 태그리스 결제방식으로 탑승하는 경우, 거스름돈을 기다리지도 않아도 되고 걍 태그? 당연히 돼 ㅋ;; 이러고 바로 좌석을 향해 돌진(새로운 함수) 할 수 있는 거임
대신에
비동기식으로 쓰일 때 func() 안에 call back 함수가 꼭 필요함.. 리턴값 출력까지 기다리지를 않으니, 그 대신 callback 함수를 func();마지막에 심어놓는 거고, 언제나 비동기함수의 마무리는 callback() 함수로 마무리가 되게끔 로직을 짜야함
안드로이드, node.js는 비동기식!!!!