동시성 (Concurrency)
동시성은 다른 프로그램 부분이 순서에 상관없이 또는 병렬로 실행되어 독립적으로 진행될 수 있는 능력입니다.
컴퓨팅에서 동시성은 시스템이 여러 작업이나 프로세스를 마치 동시인 것처럼 처리할 수 있도록 합니다. 작업은 엄격하게 순차적인 대신 인터리브된 방식으로 실행될 수 있으며, 각 작업이 독립적으로 진행될 수 있습니다. 이는 시스템 응답성과 리소스 활용도를 향상시킵니다. 프로세서가 작업 간에 빠르게 전환하는 시분할과 같은 기술은 동시 실행의 환상을 만듭니다. 여러 프로세서를 필요로 하는 실제 병렬성은 실제로 동일한 순간에 작업을 실행합니다. 동시성은 운영 체제, 서버 및 GUI에 필수적이며, 시스템 전체를 차단하지 않고 수많은 작업을 관리합니다.
graph LR
Center["동시성 (Concurrency)"]:::main
Pre_thread["thread"]:::pre --> Center
click Pre_thread "/terms/thread"
Pre_process["process"]:::pre --> Center
click Pre_process "/terms/process"
Rel_parallelism["parallelism"]:::related -.-> Center
click Rel_parallelism "/terms/parallelism"
Rel_identity_and_access_management_iam["identity-and-access-management-iam"]:::related -.-> Center
click Rel_identity_and_access_management_iam "/terms/identity-and-access-management-iam"
Rel_pipelining["pipelining"]:::related -.-> Center
click Rel_pipelining "/terms/pipelining"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 5살도 이해할 수 있게 설명
여러 주문을 저글링하는 요리사를 상상해 보세요. 그는 한 요리를 위해 채소를 썰면서 다른 요리를 위해 수프를 끓이고, 세 번째 요리를 위해 빵을 굽습니다. 요리사는 모든 것을 정확히 같은 초에 하는 것이 아닙니다 (그것은 병렬성입니다), 하지만 하나의 주문으로 인해 다른 모든 것이 중단되지 않도록 효율적으로 작업 간에 전환합니다. 이것은 주방을 원활하게 운영하고 음식을 더 빨리 제공하게 합니다.
🤓 Expert Deep Dive
동시성은 여러 계산이 시간적으로 겹칠 수 있도록 허용하는 설계 원칙이며, 다음과 같은 방법으로 관리됩니다.
작업 스케줄링: OS 스케줄러는 CPU 시간을 프로세스/스레드에 할당하여 동시 실행의 환상을 만듭니다.
비동기 프로그래밍: 콜백 또는 async/await와 같은 패턴을 사용하여 차단 없이 결과를 관리하며, 작업은 메인 흐름과 독립적으로 진행됩니다.
멀티스레딩: 프로세스 내의 여러 스레드는 메모리를 공유하며 동시적으로 실행됩니다. 동기화 기본 요소(뮤텍스, 세마포어)는 경쟁 상태를 방지하고 데이터 무결성을 보장합니다.
메시지 전달: 분산 시스템/액터 모델에서는 동시성이 분리된 프로세스 또는 액터 간의 메시지 교환을 통해 관리됩니다.
주요 과제에는 공유 리소스 관리, 교착 상태/라이브록 방지, 원자성 보장이 포함됩니다. 동시성(한 번에 여러 가지를 처리하는 것)은 병렬성(한 번에 여러 가지를 수행하는 것)과 다릅니다. 동시성은 병렬성 없이도 존재할 수 있습니다.