컨텍스트(context) | 현재 프로그램의 실행 상태에 대한 전반적인 정보
컨텍스트(Context)는 어떤 상황이나 조건에서 데이터나 프로그램이 실행되고 있는 상태의 전반적인 정보를 말합니다. 프로그램이 실행되는 도중에는 실행 위치, 레지스터 값, 메모리 값 등이 변경될 수 있습니다. 이러한 정보들을 모두 모아서 현재 실행되고 있는 상태를 나타내는 것이 컨텍스트입니다.
컨텍스트는 프로세스나 스레드의 실행 상태를 나타내는 정보이기 때문에, 컨텍스트 스위칭(Context Switching)이 발생할 때는 현재 실행 중인 프로세스나 스레드의 컨텍스트를 저장하고, 다음에 실행할 프로세스나 스레드의 컨텍스트를 불러옵니다.
이를 통해 운영체제는 여러 개의 프로세스나 스레드를 동시에 실행하고, 멀티태스킹(multitasking)이 가능해집니다.
컨텍스트는 어떤 환경에서 실행되는지, 어떤 작업이 수행되고 있는지, 어떤 데이터가 메모리에 올라와 있는지 등을 포함합니다. 이러한 정보들은 프로세스나 스레드의 실행을 지원하는 데 매우 중요하며, 시스템의 안정성과 성능을 결정하는 역할을 합니다.
따라서, 컨텍스트를 효율적으로 관리하는 것은 운영체제 및 프로그램의 성능 향상에 매우 중요합니다.
컨텍스트 스위칭 | CPU가 하나의 프로세스나 스레드를 다른 프로세스나 스레드로 전환하는 과정에서 발생
컨텍스트 스위칭(Context Switching)은 CPU가 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환하는 과정을 의미합니다.
컨텍스트(context)는 실행 중인 프로세스나 스레드의 상태를 의미합니다. 즉, 현재 수행 중인 프로세스나 스레드의 정보, 메모리 상태, 레지스터 값 등의 정보를 저장하고, 다음에 실행할 프로세스나 스레드의 정보를 불러오는 것입니다.
컨텍스트 스위칭은 멀티태스킹(multitasking) 환경에서 여러 개의 프로세스나 스레드가 동시에 실행되는 상황에서 발생합니다. CPU가 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환할 때, 현재 프로세스나 스레드의 상태를 저장하고, 다음 프로세스나 스레드의 상태를 불러오는 작업이 수행됩니다. 이 작업은 매우 빠르게 처리되지만, CPU에서 다른 작업을 처리하는 것보다는 비용이 크기 때문에 오버헤드(overhead)가 발생합니다.
컨텍스트 스위칭은 운영 체제에서 관리됩니다. 운영 체제는 프로세스나 스레드를 스케줄링하여, 어느 순서로 실행할 것인지 결정하고, 컨텍스트 스위칭을 수행합니다. 컨텍스트 스위칭이 자주 발생하면, 시스템의 성능에 영향을 미칠 수 있으므로, 이를 최소화하기 위해 다양한 방법들이 존재합니다.
예를 들어, 적절한 스레드 개수를 설정하거나, 비동기 I/O를 사용하여 블로킹을 최소화하는 등의 방법이 있습니다.
**** 컨텍스트 스위칭에 대해 더 알아보기
컨텍스트 스위칭은 하나의 프로세스나 스레드가 실행되는 도중에, 다른 프로세스나 스레드가 실행될 때 발생합니다. 이때, 현재 실행 중인 프로세스나 스레드의 상태를 저장하고, 다음에 실행할 프로세스나 스레드의 상태를 불러와야 합니다.
예를 들어, A 프로세스가 실행 중이고, B 프로세스가 실행되어야 할 때, 운영체제는 A 프로세스의 실행 상태를 저장하고, B 프로세스의 실행 상태를 불러옵니다. 이때, A 프로세스는 일시적으로 중단되며, B 프로세스가 실행됩니다.
컨텍스트 스위칭은 프로세스나 스레드 간의 전환이 자주 일어나는 멀티태스킹 환경에서 빈번하게 발생합니다.
예를 들어, 여러 개의 웹 브라우저 탭을 동시에 실행하거나, 여러 개의 애플리케이션을 동시에 실행하는 경우에는, 각각의 프로세스나 스레드가 동시에 실행되는 것처럼 보이지만, 실제로는 운영체제가 각각의 프로세스나 스레드를 번갈아가며 실행시키는 것입니다.
이때, 컨텍스트 스위칭이 발생하여, 각각의 프로세스나 스레드가 일시적으로 중단되고, 다른 프로세스나 스레드가 실행되는 것입니다.
컨텍스트 스위칭 오버헤드 | 하나의 프로세스/스레드 에서 다른 프로세스/스레드로 전환할 때 필요한 추가적으로 드는 비용
컨텍스트 스위칭(context switching) 오버헤드는 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환할 때 필요한 추가적인 비용입니다.
컨텍스트 스위칭 오버헤드는 대부분의 운영 체제에서 발생합니다. 이는 멀티태스킹(multitasking) 환경에서 여러 개의 프로세스나 스레드가 동시에 실행되기 때문입니다. 컨텍스트 스위칭 오버헤드는 태스크의 수가 증가할수록 더 커지며, 태스크가 CPU를 많이 사용하는 경우 성능 저하를 야기할 수 있습니다.
노드(Node.js)에서도 컨텍스트 스위칭 오버헤드가 발생할 수 있습니다. 이는 노드가 싱글 스레드에서 다중 I/O 작업을 처리하기 위해 스레드 풀을 사용하는 경우 발생합니다. 스레드 풀의 크기가 지나치게 크거나 작은 경우, 컨텍스트 스위칭 오버헤드가 증가하여 노드 애플리케이션의 성능에 영향을 미칠 수 있습니다. 따라서, 스레드 풀의 크기를 적절히 조절하는 것이 중요합니다.
'백엔드 > 노드' 카테고리의 다른 글
[NodeJS] fs 모듈 : 파일 시스템에 접근 시 사용 (0) | 2023.03.07 |
---|---|
[Node.js] 태스크 큐와 이벤트 큐 (0) | 2023.03.05 |
[Node.js] 노드에서 싱글 스레드/블로킹과 언블로킹/이벤트 루프 .../ (0) | 2023.03.04 |
[Node.js] 스레드 풀 (0) | 2023.03.04 |
[node.js] node.js 서버 환경에서 css 파일 적용하는 방법 (0) | 2022.12.27 |