파이버
(Fiber)는
컴퓨터 工學
에서 特히 가벼운
實行 스레드
이다.
스레드와 마찬가지로 파이버는
住所 空間
을 共有한다. 그러나 파이버는
協力的 멀티 태스킹을
使用하는 反面 스레드는
先占型 멀티 태스킹을
使用한다. 一般的인 스레드는 커널의 스레드 스케줄러에 依存해 實行 權限이 讓渡되지만, 파이버는 스스로 實行 權限을 讓渡한다.
파이버와 코루틴
[
編輯
]
파이버는 本質的으로
코루틴
과 類似하다. 差異點은 코루틴의 境遇 프로그래밍 言語 水準에서 具現되는
制御 흐름
人 反面, 파이버는 시스템 水準에서 具現되며 同時에 實行되지 않는 스레드의 母音인 것이다 두 槪念 中 어느 것이 먼저 나왔는지에 對한 異見이 있다. 코루틴을 시스템 水準으로 具現한 것인가
[1]
, 코루틴을 具現하기 위한 基盤으로 만들어진 것인가에 對한 紛爭이다.
[2]
長點과 短點
[
編輯
]
파이버가 協力的으로 멀티 태스킹하기 때문에
스레드 安全性
은 先占型 스레드보다 問題가 적으며,
스핀落
및
원自省 作業
을 包含한 同期化 構成은 파이버 單位가 自體的으로 讓渡를 하는 特性 德分에 동기화되므로 不必要하다. 그러나 많은 라이브러리는
非同期 I/O
를 遂行하기 위해 暗示的으로 파이버를 生成한다.
短點은 파이버가 先占型 스레드를 使用하지 않고는
多衆 프로세서
시스템을 使用할 수 없다는 것이다. 그러나 CPU 코어보다 더 많은 先占 스레드가 없는 M : N 스레딩 모델은 純粹 파이버 또는 純粹 先占 스레딩보다 더 效率的일 수 있다.
一部 서버 프로그램에서 파이버는 自體的으로 소프트 블록(soft block)을 使用하여 單一 스레드로 作動하는 上位 프로그램이 繼續 作動할 수 있도록 한다. 이런 設計에서 파이버는 CPU 處理가 必要없는 I/O 액세스에 主로 使用된다. 그래서 메인 프로그램이 旣存에 遂行中인 作業을 繼續할 수 다. 파이버는 單一 스레드 메인 프로그램에 對한 制御를 讓步하며 I/O 作業이 完了되면 파이버가 中斷 된 地點에서 繼續된다.
運營 體制 支援
[
編輯
]
파이버는 스레드에 비해
運營 體制의
支援이 相對的으로 덜 必要하다.
모던 유닉스(Unix) 시스템에서는
GNU Portable Threads
처럼
ucontext.h
라이브러리에서 提供되는
getcontext, setcontext와 swapcontext
函數를 利用해 具現하거나
boost.fiber
처럼 어셈블러를 使用하여 具現할 수 있다.
Microsoft Windows
에서 파이버는
ConvertThreadToFiber
및
CreateFiber
呼出을 통해 스레드에 使用可能한 파이버를 生成할 수 있고, 스레드 로컬 스토리지와 類似한 파이버 로컬 스토리지는 變數(variable)의 固有한 複寫本을 生成할 수 있다.
[3]
Symbian OS
의 Active Scheduler는 Fiber와 類似한 構造로 갖고 있다. 하나의 파이버를 갖고 있는 Symbian OS의
活性 客體(Active obejct)
는 非同期 呼出이 完了되면 Active Scheduler를 통해 實行된다.
여러 Active Object는 優先順位에 따라 實行되기까지 待機 狀態일 수 있으며, 各各의 Active Obejct는 實行時間에 制限을 갖는다.
같이 보기
[
編輯
]
參考 文獻
[
編輯
]
參考
[
編輯
]