hayu's 개발 일지

99클럽 코테 스터디 4일차 TIL + 스레드(Thread) 본문

IT 개념 정리 & ETC

99클럽 코테 스터디 4일차 TIL + 스레드(Thread)

hayu00 2024. 5. 24. 21:32

학습 키워드

- 스레드(Thread)

 

공부한 내용

스레드(Thread)

  • 운영체제에서 스레드는 프로세스 내부에서 실행되는 작은 작업 단위이다. 스레드는 프로세스의 실행 흐름을 구성하는 단위로, 하나의 프로세스는 내부에 여러개의 스레드가 포함될 수 있다.
  • 스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시퀀스이다. 또한, 하나의 프로세스는 하나 이상의 스레드를 갖고 있다.

⇒ 프로세스는 독립적인 특성을 가지고 있다고 하였다. 이러한 프로세스가 같은 일을 처리하기 위해 동일한 프로그램을 여러개의 프로세스로 만들게 되면, 그만큼 메모리를 차지하고, 그 외 에서 CPU에서 할당받는 자원이 중복되어 할당 받게 될 것이다. 따라서 중복되는 자원의 낭비를 줄일 필요성이 있고, 중복될 자원을 한번만 받아서 여러 곳에 사용할 수 있다면 더 효율적이게 될 것이다.

스레드의 특징

  • 프로세서들이 서로의 데이터에 접근이 직접적으로 불가능한데, 스레드는 프로세스 내부에 존재하기 때문에 프로세스의 데이터 영역에 접근이 가능하다. 그리고 스레드들끼리 서로의 데이터에 접근이 가능하다.
  • 스레드도 일종의 작업 단위이기 때문에 프로세스처럼 작업이 처리된다. 즉, 스레드도 프로세스처럼 작업을 병렬로 처리해서 속도를 높일 수 있는 것이다.
  • 스레드는 일종의 함수로 구현된다. 스레드도 함수라서 데이터(지역 변수)를 다루고, 데이터를 관리하기 위해 stack 메모리 영역을 가진다. 스레드의 메모리 영역을 thread stack이라고 부른다. 프로세스는 메모리 영역을 크게 4가지(code, data, stack, heap)으로 나눌 수 있지만, 스레드는 thread stack 메모리 공간만 갖게된다. 스레드 안에 포함된 데이터(지역 변수)는 thread stack에 저장된다. (단, 프로세스의 stack 영역에는 스레드의 지역변수는 포함하지 않는다)
  • 하나의 프로세스는 내부에 여러개의 스레드를 가질 수 있다.

멀티 스레드와 멀티 프로세스

  • 멀티 스레드는 하나의 프로세스 내부에서 여러 개의 스레드가 동시에 실행되는 것이다. 스레드끼리는 서로의 메모리 공간(thread stack)을 공유하고 접근할 수 있다. 메모리 기반 통신을 사용하기 때문에 통신 속도가 빠르다. 각 스레드들은 여러 자원을 공유하기 때문에 하나의 스레드에 문제가 생기면 나머지 스레드들도 영향을 받는다. 프로세스 내에서 스레드의 작업을 여러개로 분할해서 병렬로 처리할 수 있다.
  • 멀티 프로세스는 여러 개의 독립적인 프로세스가 동시에 실행되는 것이다. 각 프로세스는 독립된 메모리 공간을 가지며, 서로에게 접근하려면 IPC 기법을 사용해야 한다. 각 프로세스는 각각 고유한 자원을 관리하고 있어 서로에게 영향을 미치지 않는다. 하나의 프로세스 작업을 여러개로 분할 병렬로 처리할 수 있다. 이때, 프로세스는 스레드 단위로 작업을 분할한다.

스레드의 장점

  • 응답성(성능) 향상 : 스레드 간의 작업 분할과 병렬 처리로 인한 사용자가 응용 프로그램을 원할하게 사용하는데 빠른 응답성(결과)를 제공할 수 있다.
  • 자원 공유 효율성 향상 : 스레드는 하나의 프로세스 내에서 실행되기 때문에, 프로세스의 자원을 공유하여 접근할 수 있다(IPC 기법과 같은 번거로운 작업이 필요 없음). 그리고 스레드는 프로세스 내부에 있기 때문에 별도의 메모리 공간을 할당할 필요없이, 프로세스 내부에서 데이터를 관리하면 된다. 스레드는 프로세스 내부에서 thread stack이라는 공간에 데이터를 관리한다. 따라서 스레드를 사용하면 자원 공유의 효율이 높다.
  • 동시성 : 여러 개의 스레드가 동시에 실행될 수 있어서, 작업을 병렬로 처리할 수 있다.
  • 간결성 : 작업을 분리할 수 있어서 코드가 간결해질 수 있다.

스레드의 단점

  • 스레드 간의 상호 간섭 : 멀티 스레드(여러 스레드 사용)가 실행 중인 상황에, 스레드 간의 상호간섭 문제가 발생할 수 있다. 프로세스는 한 개가 다운되면, 그 프로세스만 작업이 멈추고 다른 프로세스에는 영향이 가지 않는다. 하지만 스레드는 다른 스레드가 작업을 방해하거나, 스레드간의 우선순위 설정에 문제가 있을 경우, 서로에게 영향을 미치기 때문에 예상치 못한 이슈가 발생할 수 있다.
  • 성능 저하 : 스레드를 많이 생성하면 성능 저하가 발생할 수 있다. 스레드를 많이 생성하면, 성능 저하가 발생할 수 있다.
  • 동기화 이슈 : 여러 스레드가 공유 자원에 동시에 접근할 때, 동기화 문제가 발생할 수 있다.
  • 자원 소비 : 스레드는 개별적인 실행 흐름을 가지기 때문에, 스레드의 수가 증가하면 메모리 사용량도 증가하게 되어 시스템 자원이 한계에 도달할 수 있다.

 

회고

알게된 내용

- CS 에 대한 지식이 부족하다고 느꼈는데, 이번 기회에 스레드에 대해 알게되었다.

- 스레드와 프로세스의 차이에 대해서도 알게 되었다. 

 

추후 학습할 내용

- 다른 자료구조에 대해 공부할 예정이다. 

 

 

참고 자료

- https://velog.io/@kwontae1313/%EC%8A%A4%EB%A0%88%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C