非同期処理の使い方 (fork from C言語のpthread_create(...)関数の使い放題)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

非同期処理の使い方 (fork from C言語のpthread_create(...)関数の使い放題)

#1

投稿記事 by YuO » 8年前

元トピックで明らかに主題からずれた話がでてきたので,新たにトピックを立てます。

まず,いままでの流れの引用。
あんどーなつ さんが書きました:Windowsでマルチスレッドをするのであれば、下記のものがおすすめです。この掲示板で質問してもすぐ答えが返ってくると思います。
.NET Framework -> BackgroundWorkerクラス
Windows SDK -> CreateThread関数
[hr]
hide さんが書きました:
オフトピック
横からですみませんが、なぜ.NetではBackgroundWorkerを押しているのか理由を聞いてもいいですか?
個人的には多少の何かしらの犠牲があったとしてもasync/awaitを使ったTaskのほうが読みやすくて良いと思ってます。
[hr]
あんどーなつ さんが書きました:async/awaitは使ったことがないんです。すみません。
個人的には、ラムダ式のような見た目が初心者向けではないかなと思います。
Threadクラスが一番単純なのですが、fork/joinを思わせる仕組みがなんとなく好きじゃないです。
[hr]
YuO さんが書きました:
オフトピック
あんどーなつ さんが書きました:async/awaitは使ったことがないんです。すみません。
個人的には、ラムダ式のような見た目が初心者向けではないかなと思います。
ラムダ式……?Taskを直接使っている場合にはラムダ式で書くことも多いですが……。
see) http://dixq.net/forum/blog.php?u=546&b=3452
まぁ,async/awaitはConfigureAwait(false)忘れてUIの資源使ってしまったり,ADO.NETのドライバーが実はasync/await対応していなくてawaitをUIスレッドを止めてしまったり,という罠はありますが……。
あんどーなつ さんが書きました:Threadクラスが一番単純なのですが、fork/joinを思わせる仕組みがなんとなく好きじゃないです。
Threadクラスなんて,COMのApratmentの指定が必要な時以外,.NET 1.0時代から不要です。
.NET Frameworkでのスレッドの推奨は,.NET 1.0時代より一貫してスレッドプールを利用することです。
[hr]
あんどーなつ さんが書きました:hide さん
YuO さん

私のコメントについてご指摘ありがとうございます。非常に参考になります。ちなみになんですけれども、非同期処理について下の2つの場合以外の使用例などありましたらご教授いただければ嬉しいです。

・時間のかかる処理(シミュレーション、レンダリング等)のスループットを上げる
・多少時間のかかる処理(ファイルロード、デバイス待ち等)を行うときにGUIが止まらないようにする

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 非同期処理の使い方 (fork from C言語のpthread_create(...)関数の使い放題)

#2

投稿記事 by YuO » 8年前

基本的に,UIスレッドで時間のかかる処理は行わない,というのが大原則です。
YuO さんが書きました:
あんどーなつ さんが書きました:・時間のかかる処理(シミュレーション、レンダリング等)のスループットを上げる
データ並列であれば,fork-join系の処理になります。
.NETだとPLINQが使えるパターンでしょうか。
YuO さんが書きました:
あんどーなつ さんが書きました:・多少時間のかかる処理(ファイルロード、デバイス待ち等)を行うときにGUIが止まらないようにする
デバイスへのI/Oに関わる時間は,非同期I/Oと終了時のコールバック (IO完了ポート等) を利用します。
この場合,スレッドやスレッドプールを利用することは普通しません。
まぁ,旧来のselectを使う場合はスレッドを1つ専有しますが。

閉鎖

“C言語何でも質問掲示板” へ戻る