PHP 또는 ASP가 파일 요청을 처리하는 방법은 다음과 같습니다.
- 컴퓨터의 파일 시스템에 작업을 보냅니다.
- 파일 시스템이 열리고 파일을 읽는 동안 대기합니다.
- 클라이언트에 내용을 반환합니다.
- 다음 요청을 처리 할 준비가되었습니다.
Node.js가 파일 요청을 처리하는 방법은 다음과 같습니다
1.컴퓨터의 파일 시스템에 작업을 보냅니다
2.다음 요청을 처리 할 준비가되었습니다
3.파일 시스템이 열리고 파일을 읽을 때 서버는 클라이언트에 내용을 반환합니다.
Node.js는 대기를 제거하고 단순히 다음 요청으로 계속 진행합니다.
Node.js는 단일 스레드, 비 블로킹, 비동기 프로그래밍을 실행합니다. 이는 매우 메모리 효율적입니다.
일반 php랑 NodeJs 파일처리하는 차이점을 설명한건데요. w3school에서 퍼왔습니다
2번까지는 이해가 되었고 3번에서 파일시스템이 열리고 파일을 읽을때 서버는 클라이언트에 내용을 반환합니다 하구.
그밑에 Node Js는 대기를 제거하고 단순히 다음요청으로 계속 진행합니다 라고 되어이쓴데...
이런 작업을하려면 멀티쓰레드를 사용해야 가능한것 아닌가요? 쓰레드 하나가 하나의 작업을 처리하는걸로하는데
Node js가 단일쓰레드를 사용한다고 되어있어요.
그럼 node js는 파일을 읽고 반환할때까지 아무런 작업도 못해야하는 것이 아닌가요?
다른 사이트의 글을 읽어보니
Node.js 기반 서버는 API가 실행되었을때, 데이터를 반환할때까지 기다리지 않고 다음 API 를 실행합니다. 그리고 이전에 실행했던 API가 결과값을 반환할 시, NodeJS의 이벤트 알림 메커니즘을 통해 결과값을 받아옵니다.
이런식으로 설명이 되어있던데...어떻게 하나의 작업이 끝나기전에 기다리지않고 다음 작업(다음 API)를 실행할 수있는 것인지 이해가 잘가지않아요
ㅜ
노드는 콜스택 제일 밑바닥에 큐 같은 놈이 있음 그 큐에는 위에서말하는 '요청' 이란게 들어있음 순서대로, 제일 처음에 그 '요청'이란 놈을 읽어서 콜스택에 올리고 마구 수행함 그리고 끝내면 다시 또 큐를 읽어서 다음 '요청' 을 읽고 처리함 결국 단일 스레드로 가능
어렵네요ㅜ
결국은 설명해주시는것도 하나끝내면 하나하고 또 하나 끝내면 하나하고 이런 방식아닌가요?
예를 들어 DB 조회라는 IO를 만나면 . PHP는 '요청'을 날리고 일단 기다림 이때는 흐름이 완전히 멈춰버린 상태임 그러다가 '응답'이 와서야 다시 재개가 되고 다음이 실행됨, 근데 노드는 '요청'을 날리고 바로 끝내고 다시 다음 '요청'을 처리하러 감, 흐름이 멈추지 않음 , 그러면 '응답'은 어떻게 하느냐? 주로 콜백이라는 놈을 '요청' 에 같이 담아서 보냄 , 그러면 '응답'이 준비되었을때 콜백과 함께 다시 그놈의 '요청'에 집어 넣음, 결국 단일스레드는 여러요청을 처리하다가 그 '응답' 을 '요청'으로 받아서 또 처리하게 됨 , 이건 이벤트 기반 비동기 핵심임
아... 노드도 결국 응답이 와야 다음 일을 재개하는데 이 응답이 결국 상대쪽에서 또 보낸 콜백과 요청이라는 건가요? 처음에 요청을 날리고 상대쪽에서 응답을 콜백을 요청에 담아서 보내면 받는 쪽에서는 온 요청을 처리하고 다음 요청을 또 날리고 상대쪽에서는 또 응답을 콜백을 요청에 담아 보낸다 라는건가요? 콜백이라는 단어가 생소해서 어떻게 이해해야할지는 모르겠지만 대강 이런식으로 이해했는데 맞나요?
이벤트 루프가 단일 스레드지 IO작업은 워커쓰레드가 맡고 작업 완료되면 이벤트 큐에 추가되어 이벤트 루프에서 콜백처리하는것임