- 1 名前:デフォルトの名無しさん mailto:sage [2010/12/25(土) 22:46:56 ]
- 主にソケットに関しての質疑応答スレッドです。
Programming UNIX Socket FAQ (日本語訳) www.kt.rim.or.jp/~ksk/sock-faq/indexj.html Winsock Programmer's FAQ (日本語訳) www.kt.rim.or.jp/~ksk/wskfaq-ja/ 関連リンクは>>2-10辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port26 hibari.2ch.net/test/read.cgi/tech/1269343909/ 関連スレ ネットワークプログラミング雑談 hibari.2ch.net/test/read.cgi/tech/1235800707/ Java ネットワークプログラミング 【教えて!】 hibari.2ch.net/test/read.cgi/tech/1086238859/
- 930 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:20:01.53 ]
- >>919
リスナーは1本で。 各ワーカーにはパイプで適当にソケットを送りつければ良い。
- 931 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:26:49.72 ]
- select使うのにlistener必要?
分配にポリシーを実装する必要なければ、複数のworkerが直接同時にselectすればいい。
- 932 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:34:20.91 ]
- >>931
だれも待ち受けしなかったらサーバにならなくね?
- 933 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:38:39.05 ]
- >>924
>>902
- 934 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:40:52.10 ]
- スレッド1万あるよりはマシ
- 935 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:46:01.12 ]
- >>928
Winsock FAQ www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.html には 「経験則3: select()は避ける」 とあるけど これの元ネタの英文はかなり古いものなのかな。
- 936 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:47:38.09 ]
- WIndowsのselectは性能悪かったしね。たぶん今もそうだけど。
- 937 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:49:17.95 ]
- >>935
winならそれでいいんじゃね? unixlinuxには選択肢ないからな
- 938 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:50:29.14 ]
- >>930
なるほど、やりかたはわかった。ただ、わざわざそうすることのメリットがよくわからないな。 activeなソケットの偏りで効率が落ちる問題は残るし、特にプログラミングが簡単になるようにも 思えないし。 >>929 「そうならないように」って、無理だろそりゃ。どのソケットがactiveになるか事前に判断できる わけがないし。
- 939 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:51:19.09 ]
- >>936-937
スレッド嫌いなのでselect()で実装してやったけど なんの問題もなくサクサク動いたよw Winsock FAQってWindows 9x の時代のものじゃないのかな。
- 940 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:51:57.12 ]
- UNIXだとfdが多くなったらselectより、poll, epoll, /dev/poll, kqueueでしょ。
意外にもfd maskのbit演算がボトルネック!
- 941 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:53:25.28 ]
- >>938
C10Kのようなのだとスレッドのオーバーヘッドのが大きくなるから。 クライアント数が少ないのならスレッド実装のが楽
- 942 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:53:27.29 ]
- 95系のselectは性能どころか仕様にも問題あった。
詳しくは古いwinsockのドキュメント読んでくれ。
- 943 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:56:10.86 ]
- >>931
こっちは同時select()か。全スレッド同時に起きるけど、mutexを奪った1スレッドだけが 処理するという形になるわけかな。
- 944 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:00:20.71 ]
- >>943
それではスレッドにする意味がないような。
- 945 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:06:57.74 ]
- >>943
違うよ。 同時selectしているスレッドの一つだけが起きる。 どれが起きるかはスケジューラ任せ。 自分で選びたいならlistener/schedulerを作らないと仕方ない。 read等も同様の仕様。ほとんどのUNIXが。
- 946 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:50:18.53 ]
- >>945
そうだっけ?それだとレベルトリガじゃないような気もするが、正直1つのソケットを複数のスレッドで 同時にselect()するなんてやったことなかったから勘違いしていたかもしれん。 であれば、どのスレッドにどのソケットを監視させるかという割り振りも必要なかったといことか。
- 947 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:03:10.33 ]
- forkするマルチプロセスサーバが一つのsocketで全員acceptしてますよ。
じゃないと同じポート番号にならないし。 もちろん起きるのは一つのプロセスだけ。
- 948 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:53:17.93 ]
- >>947
Unix 系はいいんだが, WinSock ってそのへんどうなってんの? # 明日から Windows でネットワークプログラムするはめになってしまった orz
- 949 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:07:41.22 ]
- >>938
1万スレッド起こせるならその方が楽だけどね 普通は無理っしょ
- 950 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:09:42.76 ]
- >>938
事前に判断なんて無理なので、無理しないで淡々と振り分ける。 偏ったらあきらめるか、ソケットを余力がある他のスレッドに投げる。
- 951 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:11:13.18 ]
- Winsockの場合は、対象となるWinsockのバージョンのドキュメントをしっかり読んでください。
特にXPでは〜、Vistaでは〜、7では〜との注意書きは必ず読みましょう。 読まない人はプログラム書くなと言いたくなるくらい細かい違いが多い。
- 952 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:11:39.79 ]
- >>940
今はそこはどうでもいい
- 953 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:18:52.51 ]
- >>945
これ本当?どこかにリファレンスがあるなら教えて欲しいな。 例えば、ソケットがread readyになって起こされたスレッドがreadしなかった 場合とかどうなるの?
- 954 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:25:42.66 ]
- 別に何も起こりませんが?
- 955 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:35:15.90 ]
- >>954
「何もない」があるのよ! epollとかでエッジトリガとかだと何もしないがゆえに 問題になることはあるかも
- 956 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:44:57.62 ]
- >>954
理解できないです。 select/pollはレベルトリガですよね? 起こされたスレッドがreadしないでsleepしたら同じsocketでselectしている 別のスレッドが起きない?
- 957 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:45:51.97 ]
- >>956
それでいいだろ Aのスレッドでなにも怒らないからBのスレッドで怒り爆発だろ
|

|