CRuby(MRI)는 GVL(Global VM Lock)로 인해 한 번에 하나의 스레드만 루비 코드를 실행할 수 있습니다. 이로 인해 CPU 집중적인 작업에서는 진정한 병렬 처리가 어렵습니다. 하지만 네트워크 요청, 파일 I/O, 데이터베이스 쿼리 등 I/O 바운드 작업 중에는 GVL이 해제되어 다른 스레드가 실행될 수 있으므로, 이러한 작업에서 스레드는 성능 향상에 크게 기여합니다.
스레드 사용 시 데이터 무결성을 위해 스레드 안전성(Thread Safety)을 고려해야 합니다. 여러 스레드가 공유 데이터에 동시에 접근할 때 발생하는 경쟁 조건(Race Condition)은 Mutex를 사용하여 해결할 수 있습니다. mutex.synchronize 블록은 한 번에 하나의 스레드만 접근하도록 보장합니다.
실용적인 패턴으로 워커 풀(Worker Pool)이 있습니다. 이는 고정된 수의 스레드가 Queue를 통해 작업을 처리하여 효율성을 높입니다. Queue 클래스는 스레드 안전성을 보장합니다. 또한, Thread.current를 통해 스레드 로컬 스토리지(Thread-Local Storage)를 활용하여 각 스레드만의 독립적인 데이터를 저장할 수 있습니다. 스레드는 “run”, “sleep”, “aborting”, false(정상 종료), nil(예외 종료) 등의 상태를 가지며, alive?와 value 메서드로 생명 주기를 관리할 수 있습니다.