Concurrency and Parallelism

동시성 (Concurrency) vs. 병렬성 (Parallelism) 동시성과 병렬성은 모두 여러 작업을 효율적으로 처리하기 위한 방법이지만, 그 접근 방식과 목적이 다르다. 동시성은 작업 관리와 응답성 향상에 중점을 두고, 병렬성은 전체적인 처리 속도 향상에 초점을 맞춘다. 실제 프로그래밍에서는 두 개념을 적절히 조합하여 사용하는 것이 효과적이다. Source: <https://www.codeproject.com/Articles/1267757/Concurrency-vs-Parallelism 동시성(Concurrency)은 여러 작업이 동시에 진행되는 것처럼 보이게 하는 개념으로, 단일 코어에서도 구현이 가능하며, 실제로는 작업들을 빠르게 전환하며 실행한다. 그래서, 실제로는 동시에 실행되지 않지만, 동시에 실행되는 것처럼 보인다. 이러한 작업들은 CPU가 여러 작업들을 빠르게 번갈아가며 처리하며, 이를 “컨텍스트 스위칭(Context Switching)“이라고 한다. ...

October 5, 2024 · 3 min · Me

asyncio

Asyncio Python의 asyncio는 비동기 I/O 프로그래밍을 지원하는 표준 라이브러리로, async/await 구문을 활용해 동시성 코드를 작성할 수 있게 해 준다. 특히 I/O 바운드 작업(네트워크 통신, 파일 입출력 등)에서 성능을 극대화할 수 있으며, Python의 GIL(Global Interpreter Lock) 제약을 우회하는 싱글 스레드 기반 동시성 구현이 가능하다. Python 3.4부터 도입된 asyncio는 웹 서버, 데이터 수집기, 실시간 애플리케이션 등 I/O 집약적인 작업에서 혁신적인 성능 향상을 제공한다. 그러나 동기식 코드 베이스와의 통합 시 주의가 필요하며, 비동기 지원 라이브러리(aiohttp, asyncpg 등)와의 조합이 효과적이다. ...

January 19, 2025 · 6 min · Me

Greenlet and Gevent

Greenlet and Gevent Greenlet과 Gevent는 Python에서 동시성 프로그래밍을 위한 라이브러리이다. Greenlet Greenlet은 Python에서 경량 코루틴을 구현한 라이브러리이다. 추가적으로 이야기 하면, Greenlet은 Python의 경량 협력적 멀티태스킹(cooperative multitasking)을 위한 기본 단위이다. 이는 마치 매우 가벼운 스레드처럼 작동하지만, 운영체제 수준의 스레드가 아닌 사용자 공간에서 실행되는 마이크로스레드이다. 주요 특징: 경량성: 일반 스레드보다 생성 비용이 매우 적다. 협력적 멀티태스킹: 명시적으로 제어권을 양보할 때만 컨텍스트 스위칭이 일어난다. 단일 OS 스레드 내 실행: 모든 greenlet은 동일한 물리적 스레드에서 실행된다. 사용 예: ...

January 19, 2025 · 4 min · Me

동시성 (Concurrency)

동시성 (Concurrency) 동시성 (Concurrency)은 여러 작업이 동시에 실행되는 것처럼 보이지만, 실제로는 매우 빠르게 작업 간 전환을 하면서 처리하는 방식이다. 예를 들어, 하나의 CPU 코어에서 여러 작업을 빠르게 번갈아가며 실행하여 마치 동시에 여러 작업이 처리되는 것처럼 보이게 만든다. Source: https://dynamogeeks.com/blog/concurrency-vs-parallelism-a-simplified-explanation 동시성의 특징 논리적 개념: 동시성은 물리적으로 동시에 실행되는 것이 아닌, 논리적으로 동시에 실행되는 것처럼 보이게 하는 개념이다. 자원 효율성: CPU가 유휴 상태로 있지 않고 계속해서 작업을 처리하므로 시스템 자원을 효율적으로 사용할 수 있다. 응답성 향상: 여러 작업을 번갈아가며 처리하므로 전체적인 시스템의 응답성이 향상된다. 동시성의 구현 방법 멀티스레딩: 하나의 프로세스 내에서 여러 스레드를 사용하여 작업을 동시에 처리한다. 비동기 프로그래밍: 작업을 비동기적으로 처리하여 한 작업이 완료되기를 기다리지 않고 다른 작업을 수행할 수 있게 한다. 동시성의 장점 성능 향상: 여러 작업을 동시에 처리함으로써 전체적인 처리 속도를 높일 수 있다. 자원 활용 최적화: CPU와 같은 시스템 자원을 최대한 활용할 수 있다. 사용자 경험 개선: 특히 UI 애플리케이션에서 동시성을 활용하면 사용자 반응성을 크게 향상시킬 수 있다. 동시성의 주의점 복잡성 증가: 동시성 프로그래밍은 일반적인 순차적 프로그래밍보다 복잡할 수 있다. 동기화 문제: 여러 작업이 공유 자원에 동시에 접근할 때 발생할 수 있는 문제를 주의해야 한다. 디버깅의 어려움: 동시에 실행되는 작업들 간의 상호작용으로 인해 버그를 찾고 수정하기가 어려울 수 있다. 동시성의 실제 예시 웹 브라우저: 여러 탭을 동시에 열어 각각 다른 웹페이지를 로드하면서 사용자 입력을 받는 것은 동시성의 좋은 예이다. 데이터베이스 시스템: 여러 사용자의 쿼리를 동시에 처리하는 데이터베이스 시스템도 동시성을 활용한다. 동시성은 현대 프로그래밍에서 매우 중요한 개념으로, 시스템의 성능을 향상시키고 사용자 경험을 개선하는 데 크게 기여한다. ...

October 4, 2024 · 2 min · Me