TIL

이건선·2023년 5월 31일
0

Node.js

목록 보기
29/32

동기 (Synchronous)와 비동기 (Asynchronous)

1. 동기(Synchronous)

동기 코드는 순차적으로 실행됩니다. 즉, 한 작업이 끝날 때까지 다음 작업은 기다려야 합니다. 예를 들어, 파일을 읽는 동기적인 코드를 작성한다면 Node.js는 파일이 완전히 읽힐 때까지 기다립니다. 파일 읽기 작업이 완료되고 나면, 그 후에야 다음 코드를 실행하게 됩니다. 따라서, 동기 방식은 코드의 흐름을 이해하기 쉽지만, 동시에 여러 작업을 처리하는 데에는 한계가 있습니다.

2. 비동기(Asynchronous)

비동기 코드는 동시에 여러 작업을 처리할 수 있습니다. Node.js는 이벤트 루프를 사용하여 비동기 작업을 처리합니다. 이벤트 루프는 특정 작업(예: 파일 읽기, 네트워크 요청 등)이 완료되면 콜백 함수를 실행하는 방식으로 동작합니다.

비동기 방식에서, Node.js는 I/O 작업을 시작하고, 작업이 완료되기를 기다리는 대신 다음 코드를 즉시 실행합니다. 작업이 완료되면, 이벤트 루프는 그 작업에 연결된 콜백 함수를 호출하여 완료된 작업의 결과를 처리합니다.


프로세스 (Process)와 스레드 (Thread)

프로세스와 스레드는 실행 중인 컴퓨터 프로그램에 대한 추상화를 제공합니다.

프로세스(Process)

프로세스는 운영 체제에서 독립적으로 실행되는 프로그램 인스턴스입니다. 각 프로세스는 자체 주소 공간, 메모리, 데이터 및 기타 시스템 자원을 갖습니다. 또한 각 프로세스는 독립적으로 실행되며 다른 프로세스의 실행에 직접적으로 영향을 주지 않습니다.

스레드(Thread)

스레드는 프로세스 내에서 실행되는 경량 프로세스로 볼 수 있습니다. 스레드는 동일한 프로세스 내에서 메모리와 자원을 공유하며, 프로세스 내의 각 스레드는 고유한 실행 경로를 갖습니다. 이런 이유로 스레드는 종종 "프로세스 내의 프로세스"라고도 불립니다.


스레드는 멀티 스레딩을 지원하는 언어나 시스템에서 동시에 여러 작업을 처리하는 데 사용되며, 프로세스 내에서 자원을 공유할 수 있기 때문에 프로세스 간 통신보다 효율적으로 통신할 수 있습니다. 그러나 이는 동기화 문제를 일으킬 수 있는데, 이는 여러 스레드가 동일한 메모리 위치에 동시에 액세스할 때 발생합니다. 이를 제대로 관리하지 않으면 데이터의 불일치, 경쟁 상태 등의 문제가 발생할 수 있습니다.

따라서, 프로세스와 스레드는 둘 다 프로그램의 동시 실행을 가능하게 하지만, 자원 공유와 독립성 측면에서 중요한 차이점을 가지고 있습니다.

profile
멋지게 기록하자

0개의 댓글