Thread

CorinBeom·2025년 3월 20일
0

CS

목록 보기
8/22
post-thumbnail

Thread

프로세스 내에서 실행되는 작은 실행 단위이며, 멀티코어 CPU 시대에서 프로그램의 성능을 극대화하는 핵심 요소


스레드란 무엇인지, 왜 중요한지, 프로세스와는 어떤 차이점이 있는지 알아보자 !

스레드(Thread)란?

  • 하나의 프로세스 내부에서 실행되는 독립적인 실행 흐름(제어 흐름, Control Flow)
  • 즉, 한 프로세스가 여러 개의 스레드를 가질 수 있음
  • 각 스레드는 같은 코드(Code)와 전역 데이터(Global Data)를 공유하면서 실행됨

왜 스레드가 중요할까?

1️⃣ 프로세스보다 가볍고 효율적

  • 프로세스를 새로 생성하는 것보다 스레드를 생성하는 것이 훨씬 빠름
  • 프로세스를 전환할 때보다 스레드 간 전환이 더 적은 비용이 듦

2️⃣ 데이터 공유가 쉬움

  • 같은 프로세스 내에서 실행되므로 메모리를 공유할 수 있음
  • 별도의 프로세스 간 데이터를 주고받는 것보다 스레드를 사용하는 것이 훨씬 편리함

3️⃣ 멀티코어 프로세서를 활용 가능

  • 여러 개의 CPU 코어가 있다면 다중 스레드를 활용하여 병렬 처리(Parallel Processing) 가능
  • 즉, 프로그램의 실행 속도를 극대화할 수 있음

스레드와 프로세스의 차이


즉, 스레드는 프로세스보다 가볍고 효율적이며, 같은 데이터를 공유할 수 있기 때문에 멀티태스킹을 효율적으로 수행할 수 있음!


스레드의 장점과 단점

📌 스레드를 사용하면 좋은 점 (장점)

빠른 실행 속도: 스레드는 생성, 전환 속도가 빠름
메모리 공유: 같은 프로세스 내에서 실행되므로 데이터 공유가 편리함
멀티코어 활용: 다중 스레드를 사용하면 멀티코어 CPU를 최대한 활용 가능


📌 하지만 스레드를 사용할 때 주의해야 할 점 (단점)

동기화(Synchronization) 문제가 발생할 수 있음

  • 여러 스레드가 동시에 같은 데이터를 접근하면 데이터 충돌(Race Condition) 문제가 발생할 수 있음
  • 예: 두 개의 스레드가 같은 변수 값을 동시에 수정하면 엉뚱한 결과가 나올 수 있음

디버깅이 어려움

  • 다중 스레드 환경에서는 실행 순서가 예측하기 어렵기 때문에 버그를 찾기 어려움

컨텍스트 스위칭(Context Switching) 비용

  • 프로세스보다는 적지만, 스레드 간 문맥 전환도 비용이 발생

정리:

  • 스레드는 매우 유용하지만 잘못 사용하면 동기화 문제(Race Condition), 교착 상태(Deadlock) 같은 문제가 발생할 수 있음!
  • 올바른 동기화 기법(예: 뮤텍스, 세마포어 등)을 사용하여 스레드를 안전하게 관리해야 함.

다중 스레딩(Multi-Threading)과 멀티코어 활용

📌 다중 스레딩(Multi-threading)이란?

  • 하나의 프로세스에서 여러 개의 스레드를 동시에 실행하는 방식
  • 여러 개의 스레드를 사용하면 프로그램이 더 빠르게 실행될 수 있음

📌 멀티코어 시스템에서 스레드의 역할

  • 현대의 CPU는 대부분 멀티코어(Multi-core) 구조
  • 단일 코어에서는 여러 개의 스레드문맥 전환(Context Switching)으로 실행되지만,
  • 멀티코어에서는 여러 스레드가 "진짜로 동시에 실행(Parallel Processing)"될 수 있음
  • 즉, CPU 코어가 많을수록 다중 스레드를 사용하면 성능을 극대화할 수 있음!

결론

스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름

여러 개의 스레드가 하나의 프로세스 내에서 메모리를 공유하면서 실행 가능

스레드는 프로세스보다 가볍고, 빠르며, 멀티코어 환경에서 성능을 극대화할 수 있음

하지만 동기화 문제, 디버깅 어려움 등의 단점도 존재하므로 조심해서 사용해야 함

profile
Before Sunrise

0개의 댓글