2 분 소요

동기 (Synchronous)와 비동기 (Asynchronous) 코드 실행 방식에 대해 설명해보세요.

동기 코드 실행 방식은 코드의 실행 순서가 중요합니다. 즉, 코드가 한 줄씩 순차적으로 실행되며, 이전 코드가 완료되어야 다음 코드가 실행됩니다. 이러한 실행 방식은 코드가 블로킹(blocking)되는 경우가 많아, 여러 작업을 수행하는 경우 시간이 오래 걸릴 수 있습니다.

반면, 비동기 코드 실행 방식은 코드의 실행 순서가 중요하지 않습니다. 즉, 코드가 실행되는 동안 다른 코드가 실행될 수 있으며, 이전 코드가 완료되지 않아도 다음 코드를 실행할 수 있습니다. 이러한 실행 방식은 코드가 블로킹되지 않으므로 여러 작업을 동시에 처리할 수 있습니다.

비동기 코드 실행 방식은 일반적으로 콜백(callback)이나 프로미스(promise) 등을 사용하여 구현됩니다. 예를 들어, 콜백을 사용하면 코드가 비동기적으로 실행되는 동안 콜백 함수가 호출되며, 이 콜백 함수는 비동기 작업이 완료될 때 실행됩니다.

동기 코드 실행 방식과 비동기 코드 실행 방식은 각각 장단점이 있습니다. 동기 코드 실행 방식은 코드가 간단하고 이해하기 쉽지만, 여러 작업을 처리할 때 시간이 오래 걸릴 수 있습니다. 반면, 비동기 코드 실행 방식은 여러 작업을 동시에 처리할 수 있지만, 코드가 복잡해지고 이해하기 어려울 수 있습니다. 따라서 어떤 실행 방식을 선택할지는 상황에 따라 다를 수 있습니다.

블로킹과 논블로킹

블로킹(blocking)은 호출된 함수가 작업을 수행하는 동안, 다음 코드의 실행을 멈추는 것을 말합니다. 이때 코드의 실행 흐름이 중지되어 다른 작업을 수행할 수 없기 때문에, 블로킹은 일반적으로 비효율적인 방식으로 여겨집니다.

반면, 논블로킹(non-blocking)은 호출된 함수가 작업을 수행하는 동안, 다음 코드의 실행을 멈추지 않고, 다른 작업을 수행할 수 있는 것을 말합니다. 이때 코드의 실행 흐름이 중지되지 않기 때문에, 논블로킹은 보다 효율적인 방식으로 여겨집니다.

논블로킹 코드는 비동기 코드와도 관련이 있습니다. 비동기 코드는 작업을 수행하는 동안 다른 작업을 수행할 수 있기 때문에, 논블로킹으로 동작합니다. 이와 반대로, 동기 코드는 작업을 수행하는 동안 다른 작업을 수행할 수 없기 때문에, 블로킹으로 동작합니다.

예를 들어, 파일을 읽는 동기적인 코드는 파일을 읽는 동안 다른 작업을 수행할 수 없기 때문에, 블로킹 방식으로 동작합니다. 반면, 파일을 읽는 비동기적인 코드는 파일을 읽는 동안 다른 작업을 수행할 수 있기 때문에, 논블로킹 방식으로 동작합니다

프로세스 (Process)와 스레드 (Thread)의 차이점은 무엇인가요?

프로세스(Process)와 스레드(Thread)는 모두 운영체제에서 실행되는 실행 단위입니다. 그러나 프로세스와 스레드는 다음과 같은 차이점이 있습니다.

  1. 프로세스(Process)는 실행 중인 프로그램을 나타내는 운영체제의 개념이며, 스레드(Thread)는 프로세스 내에서 실행되는 실행 단위입니다.
  2. 각각의 프로세스는 독립된 메모리 공간을 가지고 있으며, 한 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다. 반면, 스레드는 같은 프로세스 내에서 실행되므로, 각각의 스레드는 해당 프로세스의 메모리 공간을 공유합니다.
  3. 프로세스는 운영체제로부터 자원을 할당받아 실행되며, 스레드는 프로세스의 자원을 공유하여 실행됩니다. 따라서 스레드의 생성, 제거, 전환 등의 작업은 프로세스의 오버헤드가 적습니다.
  4. 프로세스 간에는 서로 독립적으로 실행되므로, 한 프로세스가 다운되더라도 다른 프로세스는 영향을 받지 않습니다. 반면, 스레드는 프로세스의 메모리 공간을 공유하기 때문에, 한 스레드의 오류가 전체 프로세스를 중단시킬 수 있습니다.

요약하면, 프로세스는 실행 중인 프로그램을 나타내는 개념이며, 독립적인 메모리 공간을 가지고 있으며, 서로 다른 프로세스는 직접적으로 메모리를 공유하지 않습니다. 스레드는 프로세스 내에서 실행되는 실행 단위로, 같은 프로세스 내에서 실행되므로, 해당 프로세스의 메모리 공간을 공유합니다. 이러한 차이점 때문에 스레드는 프로세스에 비해 가볍고 빠르게 생성, 제거, 전환할 수 있으며, 다양한 용도로 활용됩니다.

참고자료 및 블로그