7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiAdvent Calendar 2022

Day 6

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

Last updated at Posted at 2022-12-05

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() 現在のスレッドをファイバーに変換します。
※12 Athens よりも前の 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) ] [ ↑ 目次へ ] [ → 付録 ]

7
0
0

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
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?