search
LoginSignup
0

posted at

updated at

<10> ファイバー (Delphi コンカレントプログラミング)

10. ファイバー

ファイバー (Fiber) は軽量スレッド (Lightweight Thread) や、マイクロスレッド (Micro Thread) とも呼ばれます。端的に言えば、並行動作しない疑似的なスレッドです。

ファイバーは実質的に コルーチン と同じで、Pascal の後継言語である Modula-2 にはコルーチンが実装されています。Pascal の方言にもコルーチンが実装されたものがあったようです。

10.1. Delphi とファイバー

Delphi にはファイバー (やコルーチン) は実装されていません。

Windows にはファイバー API が存在するので、Windows アプリケーションの場合にはこれを使う事になります。ファイバー API は Winapi.Windows 名前空間で定義されています。

Windows API 説明
CreateFiber() ファイバー オブジェクトを割り当て、スタックを割り当て、指定した開始アドレス (通常はファイバー関数) で開始するように実行を設定します。
CreateFiberEx() ファイバー オブジェクトを割り当て、スタックを割り当て、指定した開始アドレス (通常はファイバー関数) で開始するように実行を設定します。
SwitchToFiber() ファイバーをスケジュールします。
ConvertFiberToThread() 現在のファイバーをスレッドに変換します。
ConvertThreadToFiber() 現在のスレッドをファイバーに変換します。
※ Delphi での定義が間違っています。
ConvertThreadToFiberEx() 現在のスレッドをファイバーに変換します。
DeleteFiber() 既存のファイバーを削除します。
IsThreadAFiber() 現在のスレッドがファイバーであるかどうかを判断します。

ファイバー API はかなり古くからある API で、Windows NT 3.51 SP3 で実装されています。
image.png
画像は Nifty-Serve の FDELPHI に投稿されたファイバー API の使用例を実行してみたところです。2つの PaintBox を同時にグラデーション描画します。

See also:

10.2. Windows のユーザーモードスケジューラ (UMS)

Windows 7 で実装された ユーザーモードスケジューラ (UMS) は端的に言えば「ファイバーのような機構を提供するもの」です。

  • 64bit カーネル 専用。
  • Windows 10 が Anniversary Update 以降の場合、Ivy Bridge よりも前の CPU では動作しない。
  • (2022/12 現在) Windows 11 では動作しない。

うーん。

See also:

索引

[ ← 9. 非同期プログラミングライブラリ (APL) ] [ ↑ 目次へ ] [ → 付録 ]

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0