1. 동기와 비동기 코드 실행방식에 대해 설명해보세요.
동기는 요청을 보낸 후 응답을 받아야지만 다음 동작이 이루어지는 방식이다.
어떠한 태스크를 처리할 동안 나머지 태스크는 대기한다.
실제로 cpu가 느려지는 것은 아니지만 시스템의 전체적인 효율이 저하된다고 할 수 있다.
(작업을 동시에 수행, 동시에 끝남, 끝나는 동시에 시작함을 의미)
반면에 비동기는 요청을 보낸 후 응답의 수락 여부와는 상관없이 다음 태스크가 동작하는 방식이다.
자원을 효율적으로 사용할 수 있다. 이때, 비동기 요청시 응답 후 처리할 콜백 함수를 함께 알려준다.
(시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미)
하지만 비동기 처리를 위해 여러개의 콜백함수를 중첩시키면 콜백지옥이 발생한다.
이를 해결하기 위해 Promise를 도입하였고, Async / Await 추가로 도입되었다.
추가내용 : https://pyoja.tistory.com/243
따라서 Node.js에서는 비동기 코드 실행 방식을 사용하여 I/O 작업을 처리하고,
이를 통해 더 높은 처리량과 더 빠른 응답 시간을 달성합니다.
동기/비동기는 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있다.
<추가공부> 블로킹 vs 논블로킹
블로킹 : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때 까지 기다렸다 작업(동기)
논블로킹 : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것(비동기)
다른 주체가 작업을 할 때 자신의 제어권이 있는지 없는지로 볼 수 있다.
2. 프로세스와 스레드의 차이점은 무엇인가요?
면접질문시에 간단하게 이정도면 답하면 될 것 같다.
프로세스는 운영체제로부터 자원을 할당받아 독립적으로 실행되는 작업 단위입니다. (실행중인 프로그램)
이에 반해 스레드는 프로세스 내에서 실행되는 여러 실행 흐름 중 하나로,
프로세스 내에서 Stack 메모리 영역을 제외한 Code/Data/Heap 메모리 영역을 공유합니다.
프로세스는 실행 중인 프로그램을 의미하며, 메모리 상에서 독립적으로 할당되며 각각의 프로세스는 자신만의 고유한 주소 공간(메모리)을 갖고 있습니다. 즉, 다른 프로세스에 영향을 받지 않고 독립적으로 실행될 수 있는 단위입니다.
반면에 스레드(Thread)는 프로세스 내에서 실행되는 여러 실행 흐름 중 하나입니다.
스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 Code/Data/Heap 메모리 영역을 공유합니다.
이러한 특성 때문에 스레드는 프로세스보다 더 가볍고 빠르게 생성 및 소멸할 수 있습니다.
또한 스레드는 프로세스 내에서 생성되기 때문에 프로세스 내의 데이터를 모두 공유할 수 있습니다.
이를 통해 스레드 간의 데이터 전달이 더욱 쉬워지며, 이를 통해 더욱 복잡한 작업을 수행할 수 있습니다.
예를들어 웹 브라우저는 하나의 프로세스입니다. 그리고 웹 페이지를 로딩하는 것은 하나의 스레드입니다. 이때 웹 페이지를 로딩하는 스레드는 다른 스레드와 데이터를 공유하며, 이를 통해 더욱 복잡한 작업을 수행할 수 있습니다.
<추가설명>
멀티프로세스의 장점
- 안정성: 하나의 프로세스가 죽어도 다른 프로세스에 영향을 미치지 않습니다.
- 보안: 각 프로세스는 자신의 메모리 공간을 가지고 있어 다른 프로세스의 메모리에 접근할 수 없습니다.
멀티프로세스의 단점
- 시스템 자원 소모: 각 프로세스는 자신만의 메모리 공간을 가지므로, 메모리를 많이 소모합니다.
- IPC(Inter-Process Communication)가 필요합니다.
멀티스레드의 장점
- 시스템 자원 소모가 적습니다.
- IPC가 필요하지 않습니다.
멀티스레드의 단점
안정성: 하나의 스레드가 죽으면 전체 프로세스가 영향을 받습니다.
보안: 각 스레드는 자신이 속한 프로세스의 메모리 공간을 공유하므로, 다른 스레드가 메모리에 접근할 수 있습니다.
멀티프로세스는 안정성과 보안성이 높지만 시스템 자원 소모가 크고 IPC가 필요하며,
멀티스레드는 시스템 자원 소모가 적고 IPC가 필요하지 않지만 안정성과 보안성이 낮습니다.
이미지 출처 : https://www.youtube.com/watch?v=1grtWKqTn50 (우아한테크톡)
'코딩공부 > 개발지식' 카테고리의 다른 글
[4회 - 데일리과제] 자료구조와 알고리즘 / 데이터베이스와 ORM (0) | 2023.04.18 |
---|---|
[3회 - 데일리과제] HTTP/HTTPS & RESTful API (0) | 2023.04.17 |
[1회 - 데일리과제] 이벤트 루프와 콜백함수 (0) | 2023.04.13 |
인성면접 예상질문 20개 (0) | 2023.04.06 |
목터뷰 Node.js 기술면접문제 (0) | 2023.04.06 |