Python 3.14의 concurrent.interpreters, GIL 작업 시간을 3.6초에서 0.9초로 줄이다
Python 3.14의 concurrent.interpreters로 CPU 작업을 네 개의 서브인터프리터에 나누자 네 스레드보다 훨씬 빠르게 처리됐습니다. 다만 인터프리터 하나에는 동시 호출을 하나만 허용하고 시작 비용도 프로세스보다 높아, 데이터 전달 방식과 작업 수명에 맞춘 설계가 필요합니다.
AI, 개발 도구, 오픈소스, 보안과 인프라의 변화와 이용 조건을 설명하는 최신 기사와 해설입니다.
Python 3.14의 concurrent.interpreters로 CPU 작업을 네 개의 서브인터프리터에 나누자 네 스레드보다 훨씬 빠르게 처리됐습니다. 다만 인터프리터 하나에는 동시 호출을 하나만 허용하고 시작 비용도 프로세스보다 높아, 데이터 전달 방식과 작업 수명에 맞춘 설계가 필요합니다.
리눅스 커널은 프로세스와 스레드를 모두 CPU에 배치하는 task로 다루며, 둘의 큰 차이는 주소 공간을 공유하는지에 있습니다. 공유 메모리는 데이터 복사를 줄이지만 경쟁 상태와 장애 전파를 낳으므로, 작업의 데이터 접근 방식과 실패 격리 필요성을 기준으로 선택해야 합니다.
스핀락은 잠금이 풀릴 때까지 CPU를 점유하며 기다리므로, 잠금 보유 스레드가 선점되면 대기 스레드까지 CPU를 낭비하고 우선순위 역전을 일으킬 수 있습니다. 글은 Rust의 no_std 환경에서도 스핀락을 무조건 대안으로 삼지 말고, 운영체제 뮤텍스나 초기화 구조를 검토하라고 제안합니다.
Rust로 그린 스레드 런타임을 직접 구현하며 스택 할당, ARM64 레지스터 문맥 전환, 작업 스케줄링 과정을 설명합니다. 고정 크기 스택과 워커별 큐를 쓰는 이유, `join`과 패닉 처리까지 살펴보며 스택형 태스크와 비동기 태스크의 차이도 짚습니다.
UC Berkeley의 Edward Lee가 동시성과 비결정성을 구분하고, 결정성을 물리 시스템이 아닌 모델의 속성으로 보자고 제안합니다. 결정적 모델이 성능을 반드시 떨어뜨리지 않으며, 동시·분산 시스템의 설계와 장애 허용을 쉽게 할 수 있다는 주장을 소개합니다.
비싼 값을 캐시에 저장할 때 Arc를 쓰면 값 전체를 복제하지 않고 공유할 수 있지만, Arc 안의 특정 변형만 가리키는 Arc를 만들기는 어렵습니다. 글은 Pin과 자체 참조 구조체를 이용한 투영 방법을 제안하며, 댓글에서는 투영 함수의 soundness 문제와 Arc만으로 주소 안정성을 확보하는 방안을 지적합니다.
Go 동시성의 주요 개념을 실행 가능한 예제로 정리한 미니북입니다. 고루틴과 채널부터 동기화, 테스트, 스케줄링, 진단 도구까지 빠르게 훑으며, 데이터 경쟁과 경쟁 조건의 차이도 설명합니다.