동기 / 비동기에 대해서 공부를 하려고 하면 다른 글들에는 꼭 블록 / 논블록이 같이 나오는 것을 볼 수 있다. 나도 공부를 하는 입장이기 때문에 블록 / 논블록에 대해서 알아가는 시간을 갖기 위해 여기에 적어두겠다.
보통 블로킹/동기, 논블로킹/비동기를 함께 묶어서 말한다
상황에 따라 다르지만 가장 효율성이 좋은 방식은 논블로킹/비동기 방식에 버퍼와 멀티스레드를 결합하는 방식이다.
const fs = require('fs'); fs.readFile('/file.md', (err, data) => {
// readFile 호출해 놓고 바로 리턴한다.
if (err) throw err; // 하지만 이 일에 대한 인과관계 장치를 마련해 둔다.
});
... 다른일을 한다 ...
버퍼(buffer, 문화어: 완충기억기)는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼가 늘어나는 것은 암기를 할 뇌가 늘어나는 것이라고 생각하면 편할 것 같다.( 공부하다가 궁금해서 집어넣은 깨알단어 )
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.( 공부하다가 궁금해서 집어넣은 깨알단어 )
멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.
병목(bottleneck) 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. ( 공부하다가 궁금해서 집어넣은 깨알단어 )
참고 - 위키백과 // https://hamait.tistory.com/930 // https://evan-moon.github.io/2019/09/19/sync-async-blocking-non-blocking/ // https://private.tistory.com/24