ティアのホームページ☆ミ:ID 1654:タイトル Threadの起動と終了 oC
no prev page 1/1ページ(1件) no next page
To Close..Threadの起動と終了 2023年10月06日17時40分
珍しく、プログラムの話しです。

あたしは、多コアPCのために、大量のスレッドを立ち上げて、処理が完了しだい次のデータを送り、すべてのスレッドが、順当に終わる。

そんなプログラムを作ることが多いです。

まぁ、大量のスレッドと言っても、CPUの最大スレッド数以上には立ち上げませんけれど、
例えばで言うなら?

100スレッドを超えるようなPCでも、8スレッド程度の個人向けPCでも、CPU使用率が100%近くなるようなプログラムを作ることが出来ます。
勿論100%にすることも可能ですが、色々とOSの方にも影響が出てくるので、99.9%くらいが良いですね。

簡単に言うと、最大スレッド数 -1 とか -2くらいの規模で作れば、100%行きます。

勿論、他のサービスに影響が出てはいけないので、その辺りは、設定で変更出来るようになっています。

サービスは、複数のPCから呼ばれ、タスクはどんどんと積み重なっていくので、
CPUの根本的な速度や、メモリの量、ストレージの量、速度、そう言った物を考慮しながら、作っていくわけですが?
使用するスレッドが64個有って、20のタスクを、実行する場合どうしたら良いでしょうか?

全部に均等にスレッドを割り当てる方法、古い方のスレッドを多めに実行する方法。
何も考えず、終わるのを待ってから次を実行する方法。
色々あります。

あたしが今行っているのは、すべてのタスクに均等にスレッドを割り振る方法です。

勿論割り切れなければ、古い方へ優先的に割り振ります。

64/20=3.2ですから、一つのタスクに3つか2つのスレッドになりますね?

マルチスレッドプログラムを組む上で、最低限注意しなければならないのは、スレッドの立ち上がりが以外と遅いことです。
スレッドを起動して、処理が完了したら終了して・・・それを永遠繰り返していると、スレッドの立ち上げと終了というオーバーヘッドは、タスク全体の処理を遅くします。

そこで、スレッドを立ち上げたまま、次のデータを送り込む方法というのもあります。
しかし、それはそれで、結果の保存、計算領域の初期化など、沢山の不要な処理が必要になり、結果的に不具合の温床になります。

ですので、手っ取り早く、1タスクのスレッドの最少数を設定しています。

まぁ、基本的には4か8か、その辺りです。
タスクの各データの、処理単位を小さくしすぎなければ、スレッドの起動と終了よりも、各スレッドの実行時間が長くなれば相対的に、オーバーヘッドが小さくなると言うことですね?

その当たり、タスクの種類によって、作るサービスの種類と言いましょうか?
それらによって、どの方法を選ぶかというのを決めたりします。

でもまぁ、データ毎にスレッドを起動した方が、GCも綺麗で早いと思うので、こっちを多用する傾向です。

スレッド処理をする時に、注意しなければならないのは、実処理をするスレッドと、スレッドにデータを割り振るスレッド、結果を保存したり、整理したりするスレッド。
PCを再起動した時などに、処理の中断や処理の再開をするための機能、色々と必要になります。

また、いつ新しいタスクが追加されるかも分からないので、
通信を常にリスニングしている必要もあります。

Windowsのサーバーには、クラスタリングの機能が元々あるのですが?
クラスタリング機能を有効的に使うには、DCクラスのサーバーと、複数台のサーバーが必要になります。
クラスタリングは、タスクをサーバー間で自動的に割り振ったり、結果を集約して、返してくれたり、いろいろな機能があるのですが?
まぁ、そもそも、サーバーの金額が高いこと、クラスタリングの機能を作るためには、専用のプログラムが必要なこと

そして何より、日本語でのまともな説明が何処にも無いこと(笑)

クラスタリングの機能を使うためだけに高価なサーバーとそのOSをそろえるくらいなら、自分で無理して頑張って、同等の機能をプログラムで作り上げた方が早いです。

昨今のPC事情としては、個人向けでもコアが64個くらいあってもおかしくない状況で、
ThreadRipperなんて256スレッドとか有りますしね?
Core Ultraでしたっけ?何でしたっけ? 新しく発表されたXeonも結構な数ありましたよね?

コアを遊ばせてないで、どんどん使っていきましょうよ?


閉じる
テーマ:たわごと URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=1654
 
no prev page 1/1ページ(1件) no next page