파이버(Fiber)는 컴퓨터 과학 및 프로그래밍 분야에서 경량 실행 단위(lightweight execution unit)를 의미한다. 전통적인 운영 체제 스레드(thread)보다 더 작은 단위로, 사용자 수준에서 스케줄링되며 커널 전환 없이 컨텍스트 전환이 이루어진다. 파이버는 일반적으로 다음과 같은 특징을 가진다.
-
경량성
- 파이버는 스레드에 비해 생성·소멸 비용이 낮으며, 메모리 오버헤드가 적다.
- 하나의 OS 스레드 내에서 다수의 파이버를 관리할 수 있다.
-
사용자 수준 스케줄링
- 스케줄링은 운영 체제 커널이 아닌 응용 프로그램이나 런타임 라이브러리에서 수행한다.
- 이로 인해 스케줄링 정책을 애플리케이션 요구에 맞게 세밀하게 제어할 수 있다.
-
비동기 처리와 코루틴
- 파이버는 비동기 I/O, 이벤트 기반 프로그래밍, 코루틴 구현에 활용된다.
- 예를 들어, C++ Boost.Fiber, Go 언어의 goroutine, .NET의 async/await 구현체 등에서 파이버와 유사한 메커니즘을 제공한다.
-
플랫폼 의존성
- 파이버는 운영 체제와 하드웨어에 따라 구현 방식이 다를 수 있다.
- 일부 시스템에서는 사용자 수준 스레드(user-level thread) 혹은 코루틴(coroutine)이라는 명칭으로 동일 개념을 지칭한다.
어원
‘파이버’는 영어 fiber(또는 fibers)를 한글 표기법에 따라 음역한 형태이다. 컴퓨터 과학에서 “fiber”는 1990년대 초반부터 멀티스레딩과 비동기 프로그래밍을 보완하기 위한 경량 스레드 개념으로 사용되었다.
주요 활용 사례
| 분야 | 활용 예시 |
|---|---|
| 게임 엔진 | 수천 개의 파이버를 이용해 캐릭터 AI, 물리 연산 등을 병렬 처리 |
| 네트워크 서버 | 비동기 I/O 처리에서 파이버를 사용해 요청을 효율적으로 전환 |
| 데이터베이스 | 트랜잭션 처리 흐름을 파이버로 분리하여 스케일링 |
| 언어 런타임 | Boost.Fiber(C++), libmill(C), Lua coroutine 등에서 파이버 기반 스케줄링 제공 |
관련 용어
- 스레드(Thread): 커널 수준에서 스케줄링되는 실행 단위.
- 코루틴(Coroutine): 협력적 멀티태스크를 구현하는 프로그래밍 구조, 파이버와 유사하게 사용자 수준에서 전환된다.
- 경량 프로세스(Lightweight Process, LWP): 파이버와 유사한 개념으로, OS 수준에서 관리되는 경량 스레드.
파이버는 전통적인 스레드에 비해 메모리 사용량과 전환 비용이 적어, 대규모 동시성(concurrency) 요구가 있는 시스템에서 효율적인 대안으로 활용되고 있다. 다만, 커널 수준 스케줄링의 지원을 받지 못하므로 CPU 바인딩이 필요한 작업이나 실제 병렬 계산에서는 스레드와 병행하여 사용되는 경우가 많다.