FreeBASIC マニュアルのトップに戻る

FreeBASIC ProPgMultiThreading

目次→教本→プログラマーのための案内Multi-Threading←オリジナル・サイト

マルチスレッド 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

FreeBASIC が提供する組み込みサポートを使った Multi-threading プログラミング。

序文:
Multi-threading プログラミングにより、並行処理フローを生成できます。
マルチ・プロセッサ・システムまたはマルチ・コア・システムで最も効果的です。処理フローを、別のプロセッサ/コアで実行するようにスケジュールできるため、並列処理または分散処理によって速度が向上します。

マルチプロセッサまたはマルチコアシステムで最も効果的ですが、シングルプロセッサまたはシングルコアシステムでも、I/O およびプロセス実行を停止する可能性のある他のシステム機能の、待ち時間を活用する利点があります。
1つのスレッドが実行されている間に、別のスレッドが I/O またはその他のシステム待ち時間を待機している場合があります。

スレッドは新しいプロセスを生成するよりもオーバーヘッドが少なくて済みます。システムはプロセスの新しいシステム仮想メモリ空間と環境を初期化しないためです。
プロセス内のすべてのスレッドは、同じアドレス空間を共有します。

定義
マルチスレッド・プロセスには、同時に実行できる 2つ以上の部分が含まれています。
このようなプログラムの各部分は、スレッドと呼ばれ、各スレッドは、実行の個別のパスを定義します。

プロセスとスレッドの違い:
スレッドは、並列処理によってプログラムを改善する、一般的な方法です。

マルチスレッド・プログラミング
シングルスレッドのプログラムは、一度にコードの1行を実行してから、順番に次の行に移動します(分岐、関数呼び出しなどを除く)。
これは通常、プログラマーがコードを記述するときの、デフォルトの動作です。

スレッドを作成する主な理由はいくつかあります。例えば:
- 完了するのに長く時間がかかるタスクを実行する必要があっても、ユーザーに完了まで待たせたくありませんよね。
これは、タスクの並列処理と呼ばれます。
スレッドを作成する目的は、実際にタスクの実行を高速化するのではなく、アプリケーションを、ユーザーインターフェイスで、応答性を改善することです。
重要なのは、この設計パターンを有効にするには、タスクが、暗黙のメインスレッドからほとんど独立して実行できる必要があることです。
- 複雑なタスクに、塊に分割されることで、パフォーマンス上有利になる可能性があるものがあります。
ここでは、複数のスレッドを作成して、それぞれがタスクの 1つの部分に専念するようにします。
すべてのピースが完了すると、メインス・レッドは、サブ結果を最終結果に集約します。
このパターンは、並列集約パターンと呼ばれます。
これが機能するには、タスクや計算の合計結果の一部を、単独で計算できる必要があります。後続する結果の部分が、先行する部分に依存してはだめです。

マルチスレッド・プログラムは、同時にプログラム内の2つ以上の場所から実行されます(少なくとも、同時に実行されているように見えます):

マルチ-スレッドは非常に危険であり、ここでの間違いは非常にコストがかかります。
問題が見つかった場合、デバッグは困難または不可能ですが、最悪というわけではありません。

最悪なのは、コードに間違いがあるのに、それなりに機能する場合です。
これは、スレッドが使われると、実行フローが確定的ではなくなるために、発生する可能性があります。
新しいスレッドを作成するのに、どれくらい時間がかかりますか?
同時スレッドはいくつありますか?
CPU時間は、スレッド間でどのように分配されますか?

他のスレッドも実行できるように、タイム-スライスを解放して、各スレッド(メイン・スレッドを含む)の各 'For' ループに常に 'Sleep x, 1' テンポを設定することを、推奨します。

これらの要素はすべて、実行全体に影響します。
マルチ-スレッド・コードを書くことは、何に対しても準備することであり、それは危険で興奮させることです。

マルチ-スレッドの組み込みサポート
FreeBASIC 組み込みスレッド関数が使用される場合、スレッド-セーフ・ランタイム・ライブラリが自動的に使われます(したがって、リンカーの '-mt'コンパイラ・オプションは、プログラマが独自のスレッド・ルーチンを使う場合にのみ必要です)。

このセクション(「マルチ-スレッド」)の以下のページで説明します:

参照
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2020-11-30 03:49:55
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承