코린이

스레드 기초 (Thread)

조선롤리팝 2024. 7. 13. 20:00

스레드(Thread)란?

프로세스에서 실행되는 가장 작은단위의 작업 흐름 입니다.  
스레드는 물리적인 CPU에 있는 코어(Core)를 사용하여 프로세스를 진행합니다. 
프로그래밍시 기본적으로 1개의 스레드만 사용되며, 해당 작업이 끝나기 전까지 다른 작업은 수행할 수 없습니다.
 
 

Thread 이미지
Thread 이미지

 

 

멀티스레드(Multithreading)

하나의 프로세스 내에서 여러 스레드를 생성하여 동시에 여러 작업을 수행하는 프로그래밍 기법, 멀티 스레딩을 사용하면 프로그램이 동시에 여러개의 작업을 병렬적으로 처리할 수 있어 성능과 응답성을 향상 시킬수 있습니다.  무거운 작업을 수행할때는 필수적으로 필요한 기술입니다. 가벼운 작업을 수행시 눈에 보이지 않아 멀티스레드의 필요성을 못느낄수 있습니다. 
 
 
하이퍼 스레딩(Hyper-Threading)
인텔의 기술로, 물리적인 코어 하나에서 두 개의 논리적 코어로 동작할 수 있게 하여, 두 개의 스레드를 처리할수 있게 합니다. 
물리적 코어가 논리적 코어로 동작하여  CPU자원을 효율적으로 활용함
 
 
동시성(Concurrency)
싱글코어에서 멀티스레드를 실행시키기 위한 방식으로, 단일 코어의경우 오직 하나의 스레드만 실행이 가능합니다. 하지만 이런 방식으로는 많은 프로그램들을 동시에 실행할 수 없는 단점으로 인하여 컨텍스트 스위칭이라는 기술을 사용하여 빠르게 번갈아 가며 처리하여, 사람눈에는 동시에 프로세스가 진행이 되는것 처럼 보여지는 처리 기법을 동시성 이라고 합니다.
장점 : 1개의 코어로 많은 양의 스레드를 생성할 수 있음, 비용절감
 
 
병렬성(Parallelism)
싱글코어에서 수행하는 작업과 동일하며, 물리적인 코어를 많이 가지고 있으며, 동일하게 컨텍트 스위칭 기술을 이용해 싱글코어보다 
4~8배 많은 양의 작업 수행이 가능합니다. 
장점 : 물리적인 많은양의 코어로 인해 빠르고 많은양이 처리 가능함
 
 
오버헤드(Overhead)
컴퓨팅에서 주요 작업을 수행하기 위해 필요한 추가 자원이나 시간이 소비되는 것을 의미합니다. 오버헤드는 여러 측면에서 발생할수 있으며, 특히 과도한 스레드 사용시 발생하며, 이는 성능저하 의 문제로 발생됩니다.  스레드 수를 적절히 관리하여 컨텍스트 스위칭 오버헤드를 주의 해아합니다. 
 
 

라이브러리 설치 필요

pip install psutil

 
현재 사용중인 스레드 수 조회 코드

import psutil

# 모든 프로세스의 스레드 수 합계 계산
total_threads = 0

for proc in psutil.process_iter(['pid', 'name', 'num_threads']):
    try:
        num_threads = proc.info['num_threads']
        if num_threads is not None:
            total_threads += num_threads
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        continue

print(f"현재 실행 중인 스레드 수: {total_threads}")

 
 

물리적코어, 논리적 코어 수 조회 코드

import os
import psutil

# 논리적 코어 수 (하이퍼스레딩 포함)
logical_cores = os.cpu_count()

# 물리적 코어 수
physical_cores = psutil.cpu_count(logical=False)

print(f"논리적 코어 수 (최대 스레드 수): {logical_cores}")
print(f"물리적 코어 수: {physical_cores}")