프로그래밍 동시성
Source: Dev.to
소개

모든 숙련된 프로그래머는 동시성이 양날의 검이라는 것을 알고 있습니다. 우선순위, 보일러플레이트, 그리고 다양한 모델 사이의 균형 잡기가 필요합니다. 하지만 우리는 왜 중요한지 알기 때문에 이를 감수합니다.
어떤 언어에서든 동시성을 측정하기 시작하면 가장 눈에 띄는 변화는 병렬성—작업이 동시에 발생하기 시작한다는 효과입니다.
예를 들어, 16개의 무거운 작업이 있는 앱을 생각해 보세요. 각각이 실행되는 데 1초가 걸린다면, 동기식 실행은 사용자를 16초 동안 기다리게 합니다. 16코어 CPU에서는 완벽한 동시성 모델을 통해 모든 작업을 단 1초 만에 끝낼 수 있습니다. 실제 세계에서는 코어당 1대 1 스케일링을 거의 얻지 못하지만, 좋은 동시성은 그에 가깝게 만들어 줍니다.
이득은 명확하지만 비용은 복잡성입니다. 갑자기 로직이 타이밍이라는 경직된 시스템에 얽히게 됩니다. 이제 단순히 함수를 작성하는 것이 아니라 경합을 관리해야 합니다. 스레드가 자원을 놓고 싸우거나 상태를 손상시키지 않도록 수동으로 보장해야 합니다. I/O 작업은 완전히 다른 잠금 전략을 필요로 합니다.
안전한 스레딩의 요구사항을 깨닫게 되면, 실제 기능을 만드는 데 쓰고 싶었던 시간이 사라집니다. 동시성 로직이 비즈니스 로직에 직접 침투해, 잠금과 세마포어로 깨끗한 함수를 어지럽히게 되고 “왜 이렇게까지 스레드를 써야 하지?” 라는 생각이 들게 됩니다.
Py‑TokenGate 소개
나는 수동적인 자원 보호의 정신적 부담 없이, 그리고 동기식 로직을 완전히 다시 쓰지 않고도 스레딩의 성능 이점을 원했습니다.
TokenGate는 토큰‑관리 동시성에 대한 실험입니다. 함수 내부에서 직접 잠금을 관리하는 대신, 함수를 장식하기만 하면 됩니다.
@task_token_guard(operation_type='prime_check', tags={'weight': 'medium'})
def prime_operation(n):
"""Check if the number is prime (moderate complexity)."""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
@task_token_guard를 사용하면 작업의 무게를 정의하고 OperationsCoordinator가 트래픽 제어를 담당합니다. 작업을 레인으로 나누고 토큰을 통해 작업자를 향해 메일박스로 안내합니다.
모든 레이스 컨디션을 해결해 주는 마법의 탄환은 아니지만, 표준 동시 작업 흐름에서 보일러플레이트를 효과적으로 제거합니다.
여기서 확인해 보세요:
TokenGate
정의
장식된 동기식 함수를 토큰‑관리 동시성 모델을 통해 라우팅하는 작은 실험 시스템입니다. 일반적인 스레딩 패턴과 병행하기보다 자체적인 동시성 워크플로우로 동작하도록 설계되었습니다.
비정의
프로덕션 코드로 제시된 것이 아닙니다.
개요
TokenGate는 토큰‑관리 동시성에 대한 탐구입니다: 스레드 기반 작업과 비동기 오케스트레이션을 구조화된 방식으로 조정하는 개념입니다. 이 저장소는 개념 증명이며, 완성된 제품이 아닙니다. 실험적이며, 아직 진화 중이고, 탐구 정신으로 공유됩니다.
전체 개요를 보고 싶다면, 다음을 시작하세요:
여기서 어떤 것이든 유용하거나 흥미롭거나 아이디어를 불러일으킨다면, 이미 이 프로젝트는 가치가 있습니다.
사용 방법 (두 버전, 두 데코레이터)
참고: async 함수에 데코레이터를 적용하지 마세요.
토큰 데코레이터는 asyncio를 사용하지만, 데코레이트된 함수 자체는 동기식이어야 합니다…