카테고리 없음

프로세스 process & 스레드 thread (컨텍스트 스위칭)

빛의 개발자 2024. 4. 3.

프로세스와 스레드는 거의 모든 OS에서 실행되는 프로그램을 공통적으로 설명할 수 있는 기초 단위입니다.

응용 개발자로써, 깊이 알필요는 없지만, 대충이라도 이해하는 건 필수라고 생각되네요.

 

프로세스와 스레드는 비동기 프로그래밍과 관련성이 있습니다.

우리는 컴퓨터를 사용할 때, 여러가지 프로그램을 동시에 실행합니다. 

 

쉽게 생각하면, 프로세스와 스레드는

프로그램에서의 로직을 동시에 처리하기 위한 개념이라고 생각하시면 됩니다.

 

왜 로직을 동시에 처리해야 할까요?

효율성 때문입니다.

프로그램 사용자들은 더 빠르게 동작하길 바라는 것은 당연하기 때문입니다.

 

예를들어 네이버와 같은 웹사이트를 만든다고 생각해봅시다.

 

1. 광고 영역

2. 로그인 정보 영역

3. 뉴스 영역

 

이 3가지 영역을 각각의 로직에 의해서 불러올텐데 

아래와 같은 이미지로 설명이 가능할 듯한데.

비동기로 각각의 로직을 처리하면 빠르고 효율적일 겁니다.

 

1,2,3번 작업을 할때, 각각의 네트워크 대기시간이 있기 때문에, 비동기로 처리하는 것이 효율적일 겁니다.

 

프로세스와 스레드의 구조

아래와 같은 구조입니다.

아래에서 더 자세하게 설명할테지만, window 에서 여러가지 프로세스가 동작하고, 

하나의 프로세스 안에서 여러개의 스레드가 동작할 수 있습니다.

 

 

하나의 프로세스로 보자면 아래와 같이 여러개의 스레드가 생성되어 프로세스 안의 영역에 접근하여 사용할 수 있는 구조입니다.

-  영역 참고  https://selfish-developer.com/entry/%EC%8A%A4%ED%83%9D-%ED%9E%99-%EC%BD%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%98%81%EC%97%AD

 

프로세스 Process

개발용어 안에서의 프로세스는 한마디로 표현하자면,

프로그램의 처리과정 중 하나 라고 표현할 수 있습니다.

 

Cpu는 물리적으로 하나이지만, 그 Cpu가 프로세스, 스레드를 어떻게 연산하여 처리하는지알아보겠습니다.

윈도우 작업관리자

위의 이미지는 이해를 돕기위한 작업관리자 화면입니다.

구글 크롬 탭을 몇개 열었더니, 구글 크롬 하나의 프로그램에서 28개의 프로세스가 돌아가고 있습니다.

 

제 컴퓨터의 프로세스는 285개, 그안의 스레드는 3924개 돌아가고 있습니다.

 

 

 

 

스레드 Thread

프로세스 보다 가볍다!

 

PC에서는 프로세스도 비동기로 처리되고, 스레드도 비동기로 처리됩니다.

그런데 왜 프로세스안에 여러가지 스레드로 나눠서 개발할까요?

 

이유는 프로세스는 물리적인 메모리 주소 등을 따로 할당하지만, 

스레드는 아래의 그림과 같이 code,data, stack, heap 영역을 공유하여 사용할 수 있다는 점 때문입니다.

 

프로세스 간에 영역을 공유하려면, 어쨌든 통신이 필요한 것이고, 스레드를 나누는 것보다 비효율적입니다.

참고
IPC : 프로세스 간의 통신방법 

그래서 스레드를 쓰는 것이죠.

 

 

컨텍스트 스위칭 (context switching)

위에서 설명했다시피, 프로세스와 스레드는 비동기 작업으로써 동시에 작업이 시작됩니다.

사실은 위의 내용은 틀렸습니다.

cpu 코어는 하나의 연산만 처리할 수 있기 떄문에, 작업 순서는 여러번 바뀔 수 있습니다.

 

 

위에서 설명한 비동기 스레드 작업이 cpu 작업 순서로 보자면, 아래와 같다는 겁니다.

 

CPU가 1번 작업을 하다가 2번 작업으로 넘어가는 것을 컨텍스트 스위칭 (context switching)이라고 합니다.

 

컨텍스트 스위칭은 프로세스 스레드 둘다 일어날 수 있습니다.

 

프로세스 - 컨텍스트 스위칭

프로세스의 컨텍스트 스위칭은 아래와 같은 조건중 하나가 발생되면 일어난다고 합니다.
  • 멀티태스킹 작업. 컨텍스트 전환은 한 프로세스가 다른 프로세스에 양보하여 두 번째 프로세스가 실행될 때 발생합니다. 어떤 경우에는 프로세스에 일정량의 CPU 시간만 할당되었기 때문에 컨텍스트 전환이 발생합니다. 그러나 프로세스가 우선 순위가 더 높은 프로세스에 CPU를 양도해야 하는 경우에도 발생할 수 있습니다. 또는 입출력 작업 을 기다리는 경우처럼 프로세스가 자발적으로 CPU를 양도할 수도 있습니다 .
  • Interrupt 하드웨어 또는 소프트웨어 구성 요소의 시스템 중단 으로 인해 콘텐츠 전환이 발생합니다. 예를 들어, 사용자가 키를 누를 때 키보드가 인터럽트를 발행할 수도 있고, 사용자 입력이 필요할 때 애플리케이션이 인터럽트를 발행할 수도 있습니다. OS에는 일반적으로 이러한 요청을 처리하고 우선순위를 지정하는 인터럽트 핸들러가 포함되어 있습니다.
  • 사용자/커널 전환. 어떤 경우에는 OS가 사용자 모드와 커널 모드 사이를 전환할 때 컨텍스트 전환이 발생할 수 있습니다. 예를 들어 프로세스는 시스템 리소스에 액세스하기 위해 사용자 모드에서 커널 모드로 전환해야 할 수 있으며, 이로 인해 다양한 권한 수준을 수용하기 위해 컨텍스트 전환이 필요할 수 있습니다.

인터럽트와, 사용자/커널모드는 저도 잘 모르는 내용이라 나중에 내용을 더 추가해봐야겠습니다.

 

참고- https://www.techtarget.com/whatis/definition/context-switch

 

스레드 - 컨텍스트 스위칭

 

https://velog.io/@kbpark9898/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%AD

이 부분은 더 깊게 공부가 필요합니다.

 

 

긴글 읽어 주셔서 감사합니다.

더 궁금하신 사항은 댓글로 문의해주시면 빠르게 답변드리겠습니다.

 

 

댓글