ネットワークプログラミング相談室 Port27at TECH
ネットワークプログラミング相談室 Port27 - 暇つぶし2ch937:デフォルトの名無しさん
12/04/15 20:49:17.95
>>935
winならそれでいいんじゃね?
unixlinuxには選択肢ないからな

938:デフォルトの名無しさん
12/04/15 20:50:29.14
>>930
なるほど、やりかたはわかった。ただ、わざわざそうすることのメリットがよくわからないな。
activeなソケットの偏りで効率が落ちる問題は残るし、特にプログラミングが簡単になるようにも
思えないし。

>>929
「そうならないように」って、無理だろそりゃ。どのソケットがactiveになるか事前に判断できる
わけがないし。

939:デフォルトの名無しさん
12/04/15 20:51:19.09
>>936-937
スレッド嫌いなのでselect()で実装してやったけど
なんの問題もなくサクサク動いたよw

Winsock FAQってWindows 9x の時代のものじゃないのかな。

940:デフォルトの名無しさん
12/04/15 20:51:57.12
UNIXだとfdが多くなったらselectより、poll, epoll, /dev/poll, kqueueでしょ。
意外にもfd maskのbit演算がボトルネック!

941:デフォルトの名無しさん
12/04/15 20:53:25.28
>>938
C10Kのようなのだとスレッドのオーバーヘッドのが大きくなるから。
クライアント数が少ないのならスレッド実装のが楽

942:デフォルトの名無しさん
12/04/15 20:53:27.29
95系のselectは性能どころか仕様にも問題あった。
詳しくは古いwinsockのドキュメント読んでくれ。

943:デフォルトの名無しさん
12/04/15 20:56:10.86
>>931
こっちは同時select()か。全スレッド同時に起きるけど、mutexを奪った1スレッドだけが
処理するという形になるわけかな。

944:デフォルトの名無しさん
12/04/15 21:00:20.71
>>943
それではスレッドにする意味がないような。

945:デフォルトの名無しさん
12/04/15 21:06:57.74
>>943
違うよ。
同時selectしているスレッドの一つだけが起きる。
どれが起きるかはスケジューラ任せ。
自分で選びたいならlistener/schedulerを作らないと仕方ない。

read等も同様の仕様。ほとんどのUNIXが。

946:デフォルトの名無しさん
12/04/15 21:50:18.53
>>945
そうだっけ?それだとレベルトリガじゃないような気もするが、正直1つのソケットを複数のスレッドで
同時にselect()するなんてやったことなかったから勘違いしていたかもしれん。
であれば、どのスレッドにどのソケットを監視させるかという割り振りも必要なかったといことか。

947:デフォルトの名無しさん
12/04/15 22:03:10.33
forkするマルチプロセスサーバが一つのsocketで全員acceptしてますよ。
じゃないと同じポート番号にならないし。
もちろん起きるのは一つのプロセスだけ。

948:デフォルトの名無しさん
12/04/15 22:53:17.93
>>947
Unix 系はいいんだが, WinSock ってそのへんどうなってんの?
# 明日から Windows でネットワークプログラムするはめになってしまった orz


949:デフォルトの名無しさん
12/04/15 23:07:41.22
>>938
1万スレッド起こせるならその方が楽だけどね
普通は無理っしょ

950:デフォルトの名無しさん
12/04/15 23:09:42.76
>>938
事前に判断なんて無理なので、無理しないで淡々と振り分ける。
偏ったらあきらめるか、ソケットを余力がある他のスレッドに投げる。

951:デフォルトの名無しさん
12/04/15 23:11:13.18
Winsockの場合は、対象となるWinsockのバージョンのドキュメントをしっかり読んでください。
特にXPでは~、Vistaでは~、7では~との注意書きは必ず読みましょう。
読まない人はプログラム書くなと言いたくなるくらい細かい違いが多い。

952:デフォルトの名無しさん
12/04/15 23:11:39.79
>>940
今はそこはどうでもいい

953:デフォルトの名無しさん
12/04/15 23:18:52.51
>>945
これ本当?どこかにリファレンスがあるなら教えて欲しいな。
例えば、ソケットがread readyになって起こされたスレッドがreadしなかった
場合とかどうなるの?

954:デフォルトの名無しさん
12/04/15 23:25:42.66
別に何も起こりませんが?

955:デフォルトの名無しさん
12/04/15 23:35:15.90
>>954
「何もない」があるのよ!

epollとかでエッジトリガとかだと何もしないがゆえに
問題になることはあるかも

956:デフォルトの名無しさん
12/04/15 23:44:57.62
>>954
理解できないです。
select/pollはレベルトリガですよね?
起こされたスレッドがreadしないでsleepしたら同じsocketでselectしている
別のスレッドが起きない?

957:デフォルトの名無しさん
12/04/15 23:45:51.97
>>956
それでいいだろ
Aのスレッドでなにも怒らないからBのスレッドで怒り爆発だろ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch