Process vs Thread vs Coroutine

Process vs. Thread vs. Coroutine Process, Thread, Coroutine은 모두 프로그램 실행의 단위이지만, 각각 다른 특성과 용도를 가지고 있다. Process: 독립적인 실행 단위로, 자체 메모리 공간과 시스템 자원을 가진다. 다른 프로세스와 완전히 격리되어 있어 안정성이 높다. 생성과 전환에 많은 비용이 든다. Thread: 프로세스 내부의 실행 단위로, 같은 프로세스의 다른 스레드와 메모리를 공유한다. 프로세스보다 가볍고, 생성과 전환 비용이 적다. 동시성을 제공하지만, 동기화 문제에 주의해야 한다. Coroutine: 경량 스레드라고도 불리며, 스레드 내에서 실행되는 협력적 멀티태스킹 단위. 매우 가볍고, 생성과 전환 비용이 매우 적다. 비동기 프로그래밍을 단순화하고, 동시성을 효율적으로 관리한다. Process, Thread, Coroutine의 관계는 다음과 같이 계층적으로 표현할 수 있다: CPU > Core > Process > Thread > Coroutine ...

October 6, 2024 · 3 min · Me

Multithreading vs. Multiprocessing vs Multitasking

Multithreading vs. Multiprocessing vs. Multitasking Multithreading, Multiprocessing, Multitasking은 컴퓨터 시스템에서 동시성과 병렬성을 구현하는 세 가지 주요 개념이다. Multitasking은 단일 CPU에서 여러 작업(프로세스)을 동시에 실행하는 것처럼 보이게 하는 기술이다. 실제로는 CPU가 매우 빠르게 여러 작업 간을 전환하면서 실행한다. 목적: CPU 사용률을 최대화하고 사용자에게 여러 프로그램이 동시에 실행되는 것 같은 환상을 제공한다. 구현: 시분할(time-sharing) 방식을 사용하여 각 작업에 CPU 시간을 할당한다. Multithreading은 하나의 프로세스 내에서 여러 실행 흐름(스레드)을 동시에 처리하는 기술이다. 목적: 단일 프로세스의 성능을 향상시키고 자원을 효율적으로 사용한다. 특징: 스레드들은 같은 프로세스 내의 메모리와 자원을 공유한다. Multiprocessing은 여러 개의 프로세서(또는 코어)를 사용하여 여러 작업을 실제로 동시에 처리하는 기술이다. ...

October 5, 2024 · 2 min · Me

Process vs Thread

Process vs. Thread 프로세스: 독립적인 실행 단위로, 자체 메모리 공간과 시스템 자원을 가진다. 다른 프로세스와 완전히 격리되어 있어 안정성이 높다. 생성과 전환에 많은 비용이 든다. 스레드: 프로세스 내부의 실행 단위로, 같은 프로세스의 다른 스레드와 메모리를 공유한다. 프로세스보다 가볍고, 생성과 전환 비용이 적다. 동시성을 제공하지만, 동기화 문제에 주의해야 한다. https://www.geeksforgeeks.org/thread-in-operating-system/ Process vs. Thread 특성 Process Thread 정의 실행 중인 프로그램의 인스턴스 프로세스 내에서 실행되는 더 작은 실행 단위 메모리 공간 독립적인 메모리 공간 (코드, 데이터, 스택, 힙) 프로세스의 메모리 공간 공유 (코드, 데이터, 힙), 독립적인 스택 구성 요소 - 코드 영역 - 데이터 영역 - 스택 영역 - 힙 영역 - 스레드 ID - 프로그램 카운터 - 레지스터 집합 - 스택 자원 공유 다른 프로세스와 자원 공유 안 함 같은 프로세스 내 스레드 간 자원 공유 생성 비용 높음 낮음 컨텍스트 스위칭 비용이 큼 비용이 적음 (같은 프로세스 내에서) 안정성 높음 (한 프로세스의 오류가 다른 프로세스에 영향 없음) 상대적으로 낮음 (한 스레드의 오류가 전체 프로세스에 영향) 통신 프로세스 간 통신(IPC) 필요 (복잡하고 오버헤드 큼) 쉽고 빠른 통신 (공유 메모리 사용) 병렬 처리 가능하지만 오버헤드 큼 효율적인 병렬 처리 가능 메모리 구조 비교 메모리 영역 Process Thread 코드 영역 독립적 공유 데이터 영역 독립적 공유 힙 영역 독립적 공유 스택 영역 독립적 각 스레드마다 독립적 특성 상세 비교 특성 Process Thread 독립성 완전히 독립적 부분적으로 독립적 자원 공유 제한적 (IPC 필요) 쉽게 공유 가능 오류 영향 다른 프로세스에 영향 없음 같은 프로세스의 모든 스레드에 영향 동기화 필요성 낮음 - IPC 메커니즘 필요 공유 자원에 대한 동기화 필요 - 뮤텍스, 세마포어 등 사용 생성 시간 더 오래 걸림 더 빠름 종료 시간 더 오래 걸림 더 빠름 장단점 비교 구분 Process Thread 장점 - 높은 안정성 - 다른 프로세스의 영향 받지 않음 - 보안성이 높음 - 생성/종료가 빠름 - 자원 공유가 쉬움 - 통신 비용이 적음 단점 - 많은 시스템 자원 필요 - 프로세스 간 통신이 복잡 - 컨텍스트 스위칭 비용이 큼 - 동기화 문제 발생 가능 - 디버깅이 어려움 - 하나의 스레드 문제가 전체에 영향 사용 사례 비교 용도 Process 선호 Thread 선호 웹 서버 안정성이 중요한 경우 높은 동시성이 필요한 경우 GUI 앱 독립적인 작업이 많은 경우 반응성이 중요한 경우 데이터 처리 대용량 병렬 처리 데이터 공유가 많은 경우 시스템 서비스 격리가 필요한 경우 빈번한 통신이 필요한 경우 활용 예 - 독립적인 애플리케이션 - 웹 브라우저의 각 탭 - 다중 사용자 서버 - 웹 서버 요청 처리 - 게임 엔진 (렌더링, 물리 연산) - 멀티미디어 애플리케이션 동기화 메커니즘 비교 메커니즘 Process Thread 공유 메모리 명시적으로 설정 필요 기본적으로 공유 뮤텍스 프로세스 간 뮤텍스 필요 프로세스 내 뮤텍스 사용 세마포어 시스템 세마포어 필요 프로세스 내 세마포어 사용 메시지 전달 IPC 메커니즘 사용 직접 메모리 접근 이러한 차이점들을 이해하고 적절히 활용하면, 상황에 맞는 최적의 실행 단위를 선택할 수 있다. ...

October 5, 2024 · 3 min · Me

Paging vs Segmentation

Paging vs. Segmentation Paging과 Segmentation은 운영체제의 메모리 관리 기법이다. Paging: 프로세스의 주소 공간을 고정 크기의 페이지로 나누어 관리한다. 물리적 메모리를 같은 크기의 프레임으로 나눈다. 외부 단편화 문제를 해결하고 메모리 할당을 단순화한다. Segmentation: 프로세스를 논리적 단위인 세그먼트로 나누어 관리한다. 각 세그먼트의 크기는 가변적이다. 프로그램의 논리적 구조를 반영하여 메모리를 관리한다. Paging과 Segmentation 비교 특성 Paging Segmentation 분할 단위 고정 크기 페이지 가변 크기 세그먼트 주소 변환 페이지 테이블 사용 세그먼트 테이블 사용 외부 단편화 없음 발생 가능 내부 단편화 발생 가능 거의 없음 메모리 활용 효율적 유연함 구현 복잡도 상대적으로 간단 복잡함 공유와 보호 페이지 단위 세그먼트 단위 사용자 관점 투명함 프로그램 구조 반영 할당/해제 속도 빠름 상대적으로 느림 테이블 크기 큼 작음 참고 및 출처

October 5, 2024 · 1 min · Me

Pessimistic vs. Optimistic Locking

Pessimistic vs. Optimistic Locking Pessimistic Locking은 충돌을 우려해 먼저 락을 거는 방식으로, 데이터 무결성이 중요한 환경에서 적합하다. Optimistic Locking은 충돌 가능성이 낮다고 보고 사후 검증을 통해 일관성을 보장한다. 시스템 요구사항과 성능 특성에 따라 선택된다. 등장 배경 및 발전 과정 Pessimistic Locking은 초기 RDBMS + ACID 보장 요구에서 발전했으며, 충돌 회피를 위한 보수적 접근 방식이 정립되었으며, Optimistic Locking은 낮은 충돌 환경을 가정한 성능 중심 전략으로, 분산 시스템, 웹/모바일 기반 환경에서 발전해왔다. ...

August 4, 2025 · 40 min · Me

Mutex

Mutex **뮤텍스 (Mutex)**는 멀티스레드 및 멀티프로세스 환경에서 공유 자원에 대한 동시 접근을 제어하기 위한 핵심 동기화 프리미티브다. 임계 구역 (Critical Section) 에 한 번에 하나의 실행 흐름만 접근하도록 보장하며, 레이스 조건, 데이터 무결성 문제, 교착 상태 등을 예방한다. 스핀 락, 재귀 락, 슬립 락 등 다양한 구현 방식이 존재하며, 우선순위 상속, 데드락 회피, 우선순위 역전 대응 등 고급 기능도 지원된다. 현대 운영체제 및 프로그래밍 언어에서 폭넓게 활용되며, RW-lock, RCU, Lock-Free 구조 등이 대체 기법으로 함께 고려된다. ...

October 4, 2024 · 42 min · Me

조건 변수 (Condition Variable)

조건 변수 (Condition Variable) 조건 변수 (Condition Variable) 는 멀티스레드 환경에서 스레드가 특정 조건이 충족될 때까지 Busy-wait 없이 대기하도록 하는 동기화 메커니즘이다. 반드시 뮤텍스와 함께 사용하여 조건 검사·변경의 원자성을 보장하며, 주요 연산은 wait()(대기), signal()/notify_one()(하나 깨움), broadcast()/notify_all()(모두 깨움) 이다. 대부분 Mesa-style 구현을 따르므로 깨어난 뒤 조건을 while 루프로 재검사해야 하며, 유령 깨움과 신호 손실 방지를 위해 상태 변경 후 락을 잡은 채 신호를 보내야 한다. 생산자 - 소비자, 이벤트 처리, 흐름 제어 등에서 필수적으로 활용되며, POSIX, C++, Java, Go 등 다양한 플랫폼에서 지원된다. ...

October 4, 2024 · 68 min · Me

원자적 연산 (Atomic Operation)

원자적 연산 (Atomic Operation) Atomic Operation (원자적 연산) – 현대 시스템의 동시성 핵심 1단계: 기본 분석 1. 대표 태그 생성 Concurrency-Control (동시성제어) Synchronization-Primitive (동기화프리미티브) Hardware-Level (하드웨어단) Data-Integrity (데이터무결성) 2. 분류 체계 검증 현 분류(Computer Science Fundamentals > Concurrency and Parallelism > Synchronization Primitives > Hardware Level)는 적합합니다. Atomic Operation(원자적 연산)은 동시성(Concurrency)과 병렬성(Parallelism)의 근간이 되는 하드웨어 단의 동기화 기본 요소(Synchronization Primitive)로, 시스템 아키텍처와 운영체제의 핵심적 위치를 갖습니다.13 3. 핵심 요약 Atomic Operation(원자적 연산)이란 여러 스레드가 경쟁적으로 자료를 다루는 환경에서, “불가분·순간적"으로 처리되어 그 실행 중간(Intermediate State)을 다른 스레드가 인식하지 못하는 연산을 의미합니다. 하드웨어 수준의 지원 덕분에 높은 신뢰성과 성능을 제공합니다. ...

October 4, 2024 · 126 min · Me

Monitor

Monitor 대표 태그 생성 Synchronization-Primitive Concurrency-Control Mutual-Exclusion 동작-메커니즘 대표 태그 생성 Synchronization-Primitive Thread-Safety Concurrency-Control High-Level-Abstraction 분류 체계 검증 현재 분류: “Computer Science Fundamentals > Concurrency and Parallelism > Synchronization Primitives > Software Level” 검증 결과: 적절한 분류입니다. 근거: 모니터 (Monitor)는 동시성 제어를 위한 소프트웨어 수준의 동기화 기법으로, 뮤텍스 (Mutex)와 조건 변수 (Condition Variables)를 결합한 고수준 추상화 메커니즘입니다. 운영체제나 하드웨어 수준이 아닌 프로그래밍 언어 차원에서 제공되는 동기화 구조이므로 Software Level 분류가 정확합니다. ...

October 3, 2024 · 98 min · Me

Semaphore

Semaphore 세마포어 (Semaphore) 는 1965 년 에츠허르 W. 다이크스트라가 제안한 동기화 메커니즘으로, 멀티스레드·멀티프로세스 환경에서 공유 자원 접근을 제어한다. 내부 정수 카운터와 대기 큐를 관리하며, 원자적 연산인 P(wait/acquire) 와 V(signal/release) 를 통해 자원 사용 순서를 조율한다. 이진 세마포어 (Binary) 는 뮤텍스처럼 단일 접근을 보장하고, 카운팅 세마포어 (Counting) 는 N 개의 자원을 관리한다. POSIX, System V, Java, Python, Go 등 다양한 환경에서 구현되어 임계 구역 보호, 리소스 풀 관리, 생산자 - 소비자 문제, 네트워크 요청 제한 등 폭넓게 활용된다. ...

October 3, 2024 · 62 min · Me