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のスレッドで怒り爆発だろ