발표에서는 Ruby ThreadGroup 클래스의 네 가지 주요 강화 포인트를 제시하며, 이는 기존 라이브러리 방식이 아닌 코어 변경을 통해 구현되어야 하는 이유를 설명합니다. 핵심 변경 사항은 다음과 같습니다.
1. 스레드 그룹 조작성 향상
현재 ThreadGroup은 새로운 스레드를 특정 그룹에 생성하는 것조차 불편하며, 그룹 전체를 대상으로 하는 조작 메서드가 부재합니다. 이로 인해 스레드 목록을 배열로 변환 후 처리해야 하는 비효율성이 발생합니다. 이를 개선하기 위해 스레드 생성과 그룹 설정을 단일 처리로 묶는 new_thread와 같은 메서드 추가가 제안됩니다. 또한, 스레드 고유 데이터와 유사한 ThreadGroup 고유 데이터 및 스레드 폭주 방지를 위한 최대 스레드 수 제한 기능도 고려됩니다.
2. 그룹 간 조작 권한 설정
현재 ThreadGroup 간에는 아무런 권한 설정이 없어 enclosed 상태로 스레드의 이탈 및 진입을 막더라도, 그룹 내 스레드 관리를 위한 스레드를 어디에 두어야 할지 모호합니다. 관리 스레드가 그룹 내부에 있으면 혼란스럽고, 외부에 있으면 내부 스레드에 문제가 생겼을 때 제어할 수 없는 문제가 발생합니다. 이를 해결하기 위해 dominate 상태를 도입하여 특정 ThreadGroup이 다른 ThreadGroup을 지배하고 조작할 수 있는 권한을 부여하는 계층적 관계 설정이 제안됩니다. 이는 Normal → Dominated → Enclosed → Frozen의 단방향 상태 전이를 따릅니다.
3. 예외 종료를 포함한 스레드 직렬화 (ThreadQueue)
분산 처리 환경에서 여러 스레드의 종료 순서에 따른 처리가 어렵고, 예외 발생 시 즉각적인 대응이 복잡합니다. 기존 방식은 폴링이나 개별 감시 스레드를 통해 상태를 확인해야 합니다. 이를 개선하기 위해 ThreadGroup마다 ThreadQueue를 제공하여, 예외 종료를 포함한 모든 종료 스레드를 큐에 넣어 관리 스레드가 순서대로 처리할 수 있도록 합니다. thread_group_enqueue 메서드를 통해 스레드가 슬립 상태로 전환됨과 동시에 큐에 들어가도록 하여 경합 조건을 방지하고, 관리 스레드의 부담을 경감하며 제어 권한을 강화합니다. 이는 가상 쿼리 병렬 처리 및 스레드 풀 구현 예시를 통해 설명됩니다.
4. 폐쇄형 자기 공간 생성 (Local Space)
가장 비판적인 부분으로, 국소적으로 유효한 메서드 및 상수를 정의할 수 있는 Local Space 개념을 제안합니다. 이는 스레드 그룹 변경을 통해 동적으로 환경을 변경하거나, enclosed 또는 dominate 상태로 변경을 금지할 수 있습니다. 스크립트 실행 테스트 환경에서 내장 클래스 오염을 방지하거나, 샌드박스 지원, 정의 충돌 해결(예: MathN 라이브러리와 같은 전역 오염 라이브러리 공존) 등의 용도로 활용될 수 있습니다. `Fixnum