このブログの中を検索する

2012/03/30

I/O待ち時間が長い処理は非同期実行


title: I/O待ち時間が長い処理は非同期実行
url: http://csharptan.wordpress.com/2011/12/10/%e9%9d%9e%e5%90%8c%e6%9c%9fio%e5%be%85%e3%81%a1/

snippet:

-----引用-----
I/O待ち(特に通信のレスポンス待ち)にParallelクラスを使おうとすると、大量のスレッドが作られます(これも環境次第ですが、私のところでは70個くらいのスレッドが立ちました)。
-----引用-----

-----引用-----
var tasks = Common.GetQueries(context, keys)
    .Select(x => x.ExecuteAsync()
        .ContinueWith(t => { lock (w) Common.Output(t.Result, w); })
    ).ToArray(); // ToArray を付けて、ここで全タスクを先に起動してしまう。
Task.WaitAll(tasks.ToArray());

待つだけのための無駄なスレッドはなくなります。I/O待ちキューは、「I/Oを待っている処理がある」という程度の小さい情報しか持ちません。
-----引用-----

0 件のコメント:

コメントを投稿