SY 개발일지
article thumbnail
Published 2023. 5. 2. 23:57
쓰레드(Thread)란? CS 정리/개발 상식

프로세스(Process)

프로세스(process) 란 단순히 실행 중인 프로그램(program)이다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행중인 것을 말한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원, 그리고 스레드로 구성된다.

 

스레드(Thread)

스레드(thread) 란, 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드 프로세스(multi-threaded process)라고 한다.

 

멀티 쓰레드

쓰레드가 둘 이상인 것을 말한다. 멀티 스레딩 컴퓨터는 여러 개의 스레드를 효과적으로 실행할 수 있는 하드웨어 지원을 갖추고 있다. 

장점

  • 응답성: 대화형 프로그램을 멀티스레드화하면, 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어 사용자에 대한 응답성이 증가된다. 예를 들어 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와의 상호작용이 가능하다.
    • 프로세스가 하나의 thread로 돌아갈 때, 그 프로세스가 block이 되면, 그 프로그램 자체가 block이 될 가능성이 높다.
  • 자원 공유: 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 스레드를 가질 수 있다는 점이다.

  • 경제성: 프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에 스레드를 생성하고 문맥 교환을 하는 편이 보다 경제적이다.
  • 멀티 프로세서 활용: 멀티 프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 스레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉 다중 스레드를 하면 다중 CPU에서 병렬성이 증가된다.
    • 하나의 프로그램을 스레드로 만들어서 core별로 할당을 한다면, 프로세스를 실행시킬 때 성능을 높일 수 있다. 즉 확장성이 높다.

단점

  • 스레드 스케줄링이 주요 문제이다. 각각의 스레드 중 어떤 것이 먼저 실행될 지 그 순서를 알 수 없다.
  • 캐시나 변환 색인 버퍼(TLB)와 같은 하드웨어 리소스를 공유할 때 서로 간섭할 수 있다.
  • 하나의 스레드만 실행 중인 경우 싱글 스레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다.
  • 멀티 스레딩의 하드웨어 지원을 위해 응용 프로그램과 운영 체제 둘 다 충분한 변화가 필요하다.

 

멀티 프로세스

두 개 이상의 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우에 사용한다.

장점

  • 독립된 구조로서 안정성이 높다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 작업 속도가 느려지는 손해 정도는 생기지만 정지되거나하는 문제는 없다.
  • 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서가 이를 공유하면 비용적으로 저렴하다.

단점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록 오버헤드가 발생하여 성능 저하가 발생할 수 있다.
    • Context switching이 자주 일어나서 주소 공간의 공유가 잦을 경우 등
  • Context switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.
Context Switching이란
CPU는 한번에 하나의 프로세스만 실행 가능하다. CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context Switching이라고 한다. 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작 하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

 

멀티 쓰레드와 멀티 프로세스의 비교

공통점

  • 여러 흐름이 동시에 진행된다.

차이점

  멀티스레드 멀티프로세스
메모리 프로세스 내의 메모리를 공유해 사용 각각 별개의 메모리 차지
전환 속도(Context switching) 멀티 프로세스보다 빠름 멀티 스레드보다 느림
주소 공간 모든 스레드가 공통 주소 공간을 소유 모든 프로세스가 별도의 주소 공간을 소유
시간 프로세스 생성이 경제적 프로세스 생성에 시간이 많이 소요
리소스 공유 리소스(CPU, 메모리)는 스레드 간에 공유 각 프로세스에는 고유한 리소스 세트(CPU, 메모리 등) 존재
예약 우선순위 기반 똔느 시간 분할 스케줄링을 사용하여  CPU  시간을 스레드에 할당 각 프로세스는 고유한 스케줄링 알고리즘을 가짐

 

출처

'CS 정리 > 개발 상식' 카테고리의 다른 글

운영체제란 ?  (0) 2023.05.11
GoF(Gang of Four) 디자인패턴  (0) 2023.05.06
동기와 비동기, 블록과 논블록  (0) 2023.04.27
쿠키(Cookie)와 세션(Session)  (1) 2023.04.20
HTTP Protocol 의 특징  (0) 2023.04.18
profile

SY 개발일지

@SY 키키

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!