C#でスレッドプールを作成する方法をわかりやすく解説
スレッドプールとは
スレッドプールとは、あらかじめ生成された複数のワーカースレッドを再利用しながらタスクを処理する仕組みです。C#ではSystem.Threading.ThreadPoolクラスを利用することで、スレッドの生成や破棄を自分で管理する必要がなく、システムリソースを効率的に活用したマルチスレッド処理を実現できます。
スレッドプールを使うには、実行したい処理を持つメソッドを複数作成し、それらをThreadPool.QueueUserWorkItemメソッドで実行キューに登録します。
手順1:実行するメソッドを作成する
まず、次のようなメソッドを作成します。
public void one(object o) {
for (int i = 0; i <= 3; i++) {
Console.WriteLine("One executed");
}
}
同じ要領で、他のメソッドも作成しておきます。なお、WaitCallbackデリゲートで扱えるようにするため、各メソッドはobject型の引数を1つ受け取る形式にする必要があります。
手順2:QueueUserWorkItemでキューに登録する
続いて、ThreadPool.QueueUserWorkItemを使って、作成したメソッドを実行キューへ登録します。
Demo d = new Demo();
for (int i = 0; i < 3; i++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(d.one));
ThreadPool.QueueUserWorkItem(new WaitCallback(d.two));
ThreadPool.QueueUserWorkItem(new WaitCallback(d.three));
}
サンプルコード
以下のC#コードを実行すると、スレッドプールによる並列処理の動作を実際に確認できます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
class Demo {
public void one(object o) {
for (int i = 0; i <= 3; i++) {
Console.WriteLine("One executed");
}
}
public void two(object o) {
for (int i = 0; i <= 3; i++) {
Console.WriteLine("Two executed");
}
}
public void three(object o) {
for (int i = 0; i <= 3; i++) {
Console.WriteLine("Three executed");
}
}
static void Main() {
Demo d = new Demo();
for (int i = 0; i < 3; i++) {
ThreadPool.QueueUserWorkItem(new WaitCallback(d.one));
ThreadPool.QueueUserWorkItem(new WaitCallback(d.two));
ThreadPool.QueueUserWorkItem(new WaitCallback(d.three));
}
Console.Read();
}
}
出力結果
実行するたびに出力の順序は変化します。これは、スレッドプール内の複数のスレッドが同時に動作し、タスクの完了順序がその都度異なるためです。スレッドプールでは個々のタスクの実行順序は保証されないという点に注意しましょう。
Two executed Two executed Two executed Two executed Two executed Two executed Two executed One executed One executed One executed One executed One executed Two executed Two executed Three executed Three executed Two executed One executed Three executed Two executed Three executed One executed One executed One executed
-
Pythonで2つの未ソートのリストをマージしてソート済みリストを作成する方法
ここでは、ユーザーが入力した2つのリストが与えられます。各リストの要素はソートされていない状態です。この記事の目的は、これら2つの未ソートのリストを1つにマージし、その後リスト全体を昇順に並べ替えることです。例入力: A[] = {100, 50, 150} B[] = {200, 30, 20} 出力: マージ後のリスト: {20, 30, 50, 100, 150, 200}アルゴリズムステップ1: まず、ユーザー入力による2つのリストを作成します。 ステップ2: 最終的なマージリストのサイズは「1つ目のリストのサイズ + 2つ目のリストのサイズ」になります。 ステップ3: s
-
Pythonで3Dリスト(3次元配列)を作成する方法【サンプルコード付き】
3Dリストとは、いわゆる3次元配列のことです。本記事では、Pythonで3Dリストを作成し、その内容を整形して出力するプログラムを解説します。ここでは例として、文字列「*」を初期値とする3×2×2の3次元リストを生成しますが、仕組みを理解すれば整数など任意の要素を持つ配列にも簡単に応用できます。 3Dリストのイメージ 3次元リストは、リストの中にリスト、さらにその中にリストが入った多段構造のデータです。たとえば、3×3×2の3Dリストは次のように表現できます。 [[1,1,1],[2,2,2],[3,3,3]], [[4,4,4],[5,5,5],[6,6,6]] アルゴリズム ステップ1: