공부 노트

스레드란? (스레드/멀티스레드)

미로910 2024. 9. 25. 16:40

스레드(Thread)란?

  • 스레드프로그램 내에서 동시에 실행될 수 있는 작업 단위

예시

하나의 프로그램(프로세스)은 여러 가지 일을 동시에 할 수 있는데, 그때 필요한 것이 스레드

예시: 웹 브라우저

  1. 웹 페이지를 로드하는 것.
  2. 음악이나 영상을 재생하는 것.
  3. 사용자가 입력하는 키보드를 받아들이는 것.

웹 브라우저는 여러 가지 일을 동시에 해야 하니까, 여러 개의 스레드를 사용합니다.

  • 한 스레드는 웹 페이지를 읽고,
  • 또 다른 스레드는 사용자 입력을 처리하며,
  • 다른 스레드는 비디오나 음악을 재생하는 식입니다.

이렇게 여러 작업이 동시에 진행될 수 있는 이유가 스레드 덕분입니다.

 

스레드와 프로그램의 차이

  • 프로세스(프로그램): 실행 중인 프로그램 자체를 말합니다. 예를 들어, 게임을 실행하면 그 게임이 하나의 프로세스입니다.
  • 스레드: 프로그램 안에서 실행되는 작은 작업 단위입니다. 여러 스레드가 동시에 작업하면 여러 작업을 동시에 할 수 있는 것처럼 보입니다.

 


멀티스레드란?

멀티스레드는 말 그대로 "여러 개의 스레드가 동시에 실행되는 것"

예시

집에서 요리를 할 때 한 사람이 동시에 여러 가지 요리

  • 한쪽에서는 국을 끓이고,
  • 다른 쪽에서는 고기를 굽고,
  • 또 다른 쪽에서는 야채를 자르고 있다고 합시다.

각 요리 작업이 독립적으로 동시에 진행될 수 있다면, 전체적으로 훨씬 빠르게 요리를 끝낼 수 있겠죠? 이때 각 작업을 수행하는 것이 스레드입니다. 여러 스레드가 있으면 프로그램은 마치 여러 작업을 동시에 처리하는 것처럼 보입니다.

멀티 스레드 예시

1. 웹 서버

웹 서버는 대표적인 멀티스레드 프로그램입니다. 웹 서버는 여러 사용자가 동시에 웹 페이지에 접근할 수 있게 해야 하기 때문에 각 사용자의 요청을 별도의 스레드로 처리합니다.

  • 동작 방식:
    • 사용자가 웹 사이트에 접속할 때마다, 웹 서버는 각 사용자의 요청을 처리하기 위해 새로운 스레드를 생성합니다.
    • 한 사용자는 이미지 파일을 다운로드하고, 다른 사용자는 텍스트를 요청하는 등 서로 다른 작업을 동시에 처리할 수 있습니다.
    • 멀티스레드를 사용하면 수천 명의 사용자가 웹 사이트에 동시에 접속해도 서버가 효율적으로 각 요청을 처리할 수 있습니다.

2. 게임

온라인 멀티플레이어 게임도 멀티스레드를 많이 사용합니다. 게임에서는 화면 렌더링, 네트워크 통신, 사용자 입력 처리 등 많은 작업이 동시에 이루어져야 하기 때문입니다.

  • 동작 방식:
    • 하나의 스레드는 그래픽을 그리는 작업을 처리하고,
    • 또 다른 스레드는 사용자의 키보드나 마우스 입력을 처리하며,
    • 또 다른 스레드는 네트워크 통신을 담당해 서버와 게임 정보를 주고받습니다.
    • 이 모든 작업이 동시에 이루어져야 게임이 원활하게 진행됩니다.

3. 음악 플레이어

음악 플레이어도 멀티스레드를 활용한 예시입니다. 음악을 재생하면서 동시에 다른 작업을 할 수 있어야 하기 때문입니다.

  • 동작 방식:
    • 한 스레드는 음악을 재생하고,
    • 또 다른 스레드는 사용자 인터페이스(UI)를 처리하여, 사용자가 다른 곡으로 변경하거나 볼륨을 조정할 수 있게 합니다.
    • 음악 재생 중에 파일 다운로드와 같은 작업도 동시에 이루어질 수 있습니다.

 

  •  

왜 멀티스레드 환경이 중요할까?

멀티스레드 환경에서는 여러 스레드가 동시에 같은 자원(데이터베이스, 파일, 메모리 등)을 사용할 수 있습니다.

만약 스레드가 서로 충돌해서 자원을 잘못 사용하면, 프로그램에 문제가 생길 수 있습니다. 그래서 스레드가 동시에 작업할 때 안전하게 자원을 사용하도록 설계해야 합니다.


다시 정리하면:

  • 프로그램: 컴퓨터에서 실행되는 하나의 전체 작업.
  • 스레드: 그 프로그램 안에서 동시에 실행될 수 있는 작은 작업 단위.
  • 멀티스레드: 프로그램이 여러 개의 스레드를 사용하여 여러 작업을 동시에 처리하는 것.

스레드와 관련된 문제를 해결하는 방법은, 프로그램이 여러 스레드를 사용할 때 충돌하지 않도록 "동기화" 같은 기술을 사용해서 안전하게 자원을 관리하는 것이 중요합니다.


 

스레드와 멀티스레드의 차이점

스레드 (Single Thread)

  • 프로그램은 하나의 작업만 할 수 있습니다.
  • 한 번에 하나의 작업을 처리하고, 작업이 끝날 때까지 다른 작업을 처리할 수 없습니다.
  • 예시:
    • 한 스레드가 음악을 재생 중일 때, 음악을 멈추기 전에는 다른 기능(곡 변경, 볼륨 조절 등)을 할 수 없습니다.

멀티스레드 (Multi-Thread)

  • 프로그램은 여러 작업을 동시에 처리할 수 있습니다.
  • 하나의 스레드는 음악을 재생하고, 동시에 다른 스레드는 사용자 입력을 받거나 화면에 정보를 표시할 수 있습니다.
  • 예시:
    • 음악을 재생하면서 다른 스레드가 다음 곡으로 넘어가게 하거나, 볼륨을 조정하게 하는 등의 동작을 동시에 수행할 수 있습니다.

 

✨요약

  • 스레드는 프로그램 내에서 한 가지 작업을 처리하는 작업 단위입니다.
  • 멀티스레드는 프로그램 내에서 여러 스레드가 동시에 여러 작업을 처리할 수 있게 해주는 방식입니다.
  • 예를 들어, 게임도 하고 음악도 듣는 것이 멀티스레드가 아니라, 하나의 프로그램(예: 게임) 안에서 여러 작업(그래픽 렌더링, 사용자 입력 처리, 사운드 처리 등)을 동시에 수행하는 것이 멀티스레드입니다.

멀티스레드는 프로그램이 여러 작업을 동시에 처리할 수 있도록 해 주는 기능입니다. 이로 인해 사용자 경험이 더 매끄럽고 효율적으로 느껴집니다.