[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/27 09:35 / Filesize : 234 KB / Number-of Response : 958
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ネットワークプログラミング相談室 Port27



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






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<234KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef