어제 스쳐지난 것들이 오늘 수업 내용이 될 줄이야...
덕분에 스레드 개념과 운영체제 작업 처리 방식에 대해서 깊이 탐구할 수 있었다.
Synchronous, Asynchronous
-동기 처리 방식 : 작업을 순차적으로 처리하는 것
-비동기 처리 방식 : 순차적 X
✔ 여기서 생각해봐야 할 것은 융통성 있어 보이는 비동기 처리가 항상 좋은 것인가이다.
비동기적 처리에 있어서 가장 주의해야 할 점은 각 작업 단계의 순서를 보장할 수 없다는 것이다.
만약 1단계의 데이터가 2단계에서 사용된다면 1단계의 작업이 완료되기 전까지 2단계 작업이 호출되더라도 작업을 제대로 수행할 수 없다.
✔ 비동기적 처리의 문제점을 약간 해결?
콜백 함수를 중첩시켜서 비동기적 함수 구조를 하나로 묶을 수 있고 각 작업들을 순서대로 실행하게 할 수 있다.
✔ 동기적 처리가 가지는 이점!
동기적 처리는 변수나 다음 단계에서 이루어질 작업 상황을 쉽게 파악할 수 있다.
그리고 코드 작성 및 디버깅이 쉽다는 이점이 있다.
Blocking, Non-Blocking
-블로킹 : 이벤트 루프가 javascript가 아닌 작업을 하는 동안 nodejs 프로세스에서 javascript 실행을 막는 것
-논블로킹 : 막는 것 X
✔ Nodejs는 싱글 스레드이므로 다른 작업이 완료된 후에 이벤트 루프가 javascript의 콜백 함수를 실행하게 한다. 그 외 javascript 가 아닌 작업이 일어나는 동안 동시에 실행되어야 하는 (비동기적 처리방식이라면) 작업을 수행하는 동안에는 이벤트 루프가 계속 실행된다.
Process, Thread
-Process : 프로그램이 실행되는 단위
-Thread : 프로세스 내에서 실행되는 세부 작업들의 단위
✔ CPU thread 와 software적 thread를 구분하여 사용하자. CPU thread 수는 정해져 있지만 메모리가 허용하는 선에서 software적 thread수는 얼마든지 많아질 수 있다. 여기서 언급한 software적 thread이다!
✔ Process와 thread의 가장 큰 차이점은
프로세스 자원을 공유하고 있는지에 대한 것이다. 하나의 프로세스 안에 있는 스레드는 프로세스 자원 즉, 프로세스 메모리, 신호, 다른 스레드 등을 공유하기 때문에 접근할 수 있다. 하지만 다른 프로세스 간에는 자원을 공유할 수 없다.
Single Thread, Multi-Thread
✔ 멀티스레드는 deadlock 방지(하나의 작업에 오류가 났을 때 이것 때문에 전체 작업이 중단되는 것을 방지!), race condition, visibility issue 등에 신경 써야 한다.
✔ 하나의 스레드로 두 가지 작업을 수행한 시간보다 두 개의 스레드로 두 가지 작업을 수행했을 때 걸리는 시간이 더 길 수 있다. 그 이유는 스레드 간의 작업 전환을 할 때도 시간이 걸리기 때문이다. 그렇기 때문에 작업 전환에 걸리는 시간까지 고려해야 한다. 또한, 스레드 작업 전환보다 프로세스 작업 전환은 더 긴 시간이 걸린다!!
✔ CPU 만을 이용하는 계산 작업이라면 싱글스레드, CPU 이외의 자원(사용자로부터 데이터를 입력 받는다든지 네트워크에서 파일을 주고받는다든지 이런 외부기기와의 입출력을 필요로 하는 작업)을 이용하는 작업이라면 멀티 스레드가 유리하다.
'Node.js' 카테고리의 다른 글
21.04.22 mongoDB 연결 및 postman 사용 연습 (0) | 2021.04.25 |
---|---|
21.02.18 스레드풀, 워커스레드 (0) | 2021.03.06 |
21.02.18 Node.js 동작 원리, Event loop (0) | 2021.03.06 |
21.02.17 통신 프로토콜, 패키지 모듈, 쿠키-세션 (0) | 2021.02.18 |
21.02.15 배경지식 (0) | 2021.02.15 |