.NET 4.0

Parallel Extensions (並列プログラミング。タスク、同時実行コレクション、および Coordination Data Structures)
System.Threading.Tasks名前空間

サンプル:

IEnumerable<BabyInfo> Search(IEnumerable<BabyInfo> babies, QueryInfo qi) 
{
  var results = new ConcurrentStack<BabyInfo>();
  Parallel.ForEach(babies, baby => 
  {
    if (baby.Name == qi.Name && baby.State == qi.State)
    {
      results.Push(baby);
    }
  });
  return results;
}

PLINQ による並列処理

IEnumerable<BabyInfo> Search(IEnumerable<BabyInfo> babies, QueryInfo qi)
{
  return from baby in babies.AsParallel()
         where baby.Name == qi.Name && baby.State == qi.State &&
               baby.Year >= qi.YearStart && baby.Year <= qi.YearEnd
         orderby baby.Year ascending
         select baby;
}

Task

複数のロジックを並列処理することもできる。
次のコードは3つのタスクを同時に並列処理している。

Task task1 = Task.StartNew(delegate
 {
   // 重い処理1
 });

 Task task2 = Task.StartNew(delegate
 {
   // 重い処理2
 });

 Task task3 = Task.StartNew(delegate
 {
   // 重い処理3
 });

LazyInit<T>

.NET Framework には、スレッドセーフ遅延初期化の最も一般的なパターンを簡単にする LazyInit<T> 型が含まれます。LazyInit<T> の Value プロパティにアクセスすると、初期化がまだ行われていない場合は初期化が強制的に行われ、初期化されたデータが返されます。アプリケーションは、複数のスレッドによる Value の取得が競合する場合でも、その正確さを維持します。

ThreadStaticAttribute

静的フィールドの値がスレッドごとに一意であることを示します。

hreadStaticAttribute でマークした static フィールドは、複数のスレッド間で共有されません。 実行中の各スレッドは、そのフィールドのインスタンスを個別に持ち、そのフィールドに対して独自に値を設定および取得します。 このフィールドに別のスレッドからアクセスすると、フィールドには別の値が格納されます。

使用例:

[ThreadStatic]
private static MyData _d5 = new MyData();

SyncLock http://msdn.microsoft.com/ja-jp/library/3a86s51t(v=vs.80).aspx

用語

TPL (Task Parallel Library)
PLINQ (Parallel LINQ)
PFX(Parallel Extensions)



本当にほしかったのはこういうブログだったんだ

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:46:04 (1627d)

yVoC[UNLIMITȂ1~] ECirŃ|C Yahoo yV LINEf[^[Ōz500~`I


z[y[W ̃NWbgJ[h COiq 萔O~ył񂫁z COsیI COze