C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 29 を表示中)
■13641 / )  Re[14]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ れい (408回)-(2008/02/01(Fri) 04:57:00)
No13605 (モー さん) に返信
> 今回のシステム構造としてはクラサバ関係でサーバーにあるexeのコード中にスレッドは1つだけあり、それに複数のクライアントが
> アクセスしにくることになっていました。スレッドに排他制御等はかけず、場合によっては同じスレッドをほぼ同時に多数動かす
> 場合も想定しています。

よくわかりません。
exeのコード内にスレッドが一つだけなら、
排他制御も何もいりません。

スレッドは一つなのですか?複数なのですか?

> その為、万が一、そのうちの1クライアントのアクセスが1スレッド内でフリーズしたとしたら、他のクライアントに影響が
> 出ないかと考えておりました。

サーバーのスレッドが一つであれば間違いなく問題になります。
サーバーのスレッドが複数であれば、問題にならない場合もありますが、大抵は問題になります。

> ちなみに同じクラスにあるスレッドを開始する際に引数を渡したいのですが、教えて頂きたいです。

System.Threading.Thread.Start(Object)というメソッドが一番簡便だと思いますが、

七曜さんの言うように、
> にあるように、ParameterizedThreadStartを使うか、スレッド プロシージャとデータをヘルパー クラスにカプセル化し、ThreadStartを使う方法があります。
データをカプセル化して渡してもよいと思います。

全般に、スレッドについて理解が浅いように感じます。
簡単なアプリなどを作ったりして勉強してからもう一度設計したほうがよいと思います。


No13613 (七曜 さん) に返信
> 多くの場合(Soket使う場合なんかですけど)、
> リスナスレッド(クライアントからのリクエストをリッスンするスレッド)がリクエストを受けたら
> 処理用スレッドを生成/開始し、必要なデータを取得/処理する・・・といった感じになるような・・・。
> 割とメジャーな処理なので、通信プログラミング系の書籍なんかも多くありますね。

1スレッド1接続というのはスレッドやソケットの入門書籍ではよくありますが、
私の知りうる限り、ある程度信頼の置けるソフトでは殆どありません。
規模の大きいもの(IISやapacheなど)では多スレッド多接続、
規模の小さいものは1スレッド多接続が多いように思います。

スレッド切替や排他制御にはかなりのコストがかかります。
パフォーマンス的にも、開発工程的にも、見合うためにはかなり巨大でなければいけません。

> ですので、クライアント/サーバ型では、1スレッドで処理する事はスケーラビリティやアベイラビリティの関係でやりません。

クライアント/サーバーでも、1スレッドで処理する事は私の知りうる限りではよくあります。
スケーラビリティやアベイラビリティを確保のしやすさと
上記のコストを天秤にかけ、判断することになります。

話を聞く限りでは、
モーさんの場合はスレッドを使うこと自体を再考したほうがよいと思います。

Abortが必要である点、排他制御をよく理解していなそうな点などを考慮すると、
マルチスレッドで開発をすると大変なことになりそうだと思います。
返信 編集キー/


管理者用

- Child Tree -