Crystal 1.20.0, M:N 스케줄링으로 동시성 성능 향상!

by DD
1개월 전
조회수 6

Crystal 1.20.0 릴리즈, M:N 스케줄링(M:N Scheduling) 도입으로 동시성 및 자원 관리 최적화

멀티스레딩(Multi-threading) 효율성 개선 및 윈도우(Windows) 환경 안정성 강화

새로운 프로세스 API(Process API) 제공, 서브 프로세스 생성 및 출력 캡처 기능 개선

io_uring 기반의 이벤트 루프(Event Loop) 지원, Linux 환경 I/O 성능 향상 기대

M:N 스케줄링 아키텍처(M:N Scheduling Architecture)의 혁신

Crystal 1.20.0은 M:N 스케줄링(M:N Scheduling)을 통해 동시성(Concurrency)을 대폭 개선했다. 이는 기존 1:1 스레딩 모델의 한계를 극복하고, 다수의 가상 스레드(Fiber)를 소수의 OS 스레드에 매핑하여 자원 효율성(Resource Efficiency)을 높인다. 특히, `getaddrinfo`와 같은 시스템 콜(System Call)에서 다른 파이버(Fiber)의 블로킹(Blocking)을 방지하여 전반적인 시스템 응답성을 향상시켰다.

향상된 멀티스레딩(Multi-threading) 지원

이번 릴리즈에서는 멀티스레딩(Multi-threading) 효율성 향상을 위해 여러 개선 사항이 적용되었다. 병렬 컨텍스트(Parallel Context)는 워크로드(Workload)에 따라 자동으로 스레드를 시작하고, 더 많은 코어(Core)에 파이버(Fiber)를 분산시킨다. 이러한 적응형 스케일링(Adaptive Scaling)은 시스템 자원 활용도를 극대화하고, 전반적인 성능 향상에 기여한다. 84codes의 지원을 받아 진행된 이 작업은 Crystal의 멀티스레딩 지원을 한층 강화했다.

새로운 프로세스 API(Process API) 도입

Crystal 1.20.0은 서브 프로세스(Sub-process)를 생성하고 관리하는 새로운 API를 제공한다. 특히, 명령줄 인자를 문자열 배열로 처리하는 방식은 기존 API보다 안전하고 직관적이다. `Process.capture` 및 `Process.capture_result` 메서드를 통해 프로세스 출력을 쉽게 캡처할 수 있으며, 쉘(Shell) 파라미터 제거로 보안성을 강화했다. 이 API는 실험적 단계이며, 다음 릴리즈에서 안정화될 예정이다.

io_uring 기반 이벤트 루프(Event Loop) 지원

Linux 환경에서 io_uring 기반의 이벤트 루프(Event Loop)를 지원하여 I/O 성능 향상을 기대할 수 있다. `-Devloop=io_uring` 컴파일러 플래그를 통해 활성화 가능하며, SQPOLL 옵션을 사용하면 특정 벤치마크에서 성능 향상을 얻을 수 있다. 하지만, 모든 I/O 호출이 항상 yield(양보)되므로 컨텍스트 스위칭(Context Switching)이 증가할 수 있다는 점을 고려해야 한다. io_uring은 아직 실험적이며, epoll보다 느릴 수도 있다.

Crystal 1.20.0 is released!