>>945 これ本当?どこかにリファレンスがあるなら教えて欲しいな。
例えば、ソケットがread readyになって起こされたスレッドがreadしなかった
場合とかどうなるの?
別に何も起こりませんが?
>>954 「何もない」があるのよ!
epollとかでエッジトリガとかだと何もしないがゆえに
問題になることはあるかも
>>954 理解できないです。
select/pollはレベルトリガですよね?
起こされたスレッドがreadしないでsleepしたら同じsocketでselectしている
別のスレッドが起きない?
>>956 それでいいだろ
Aのスレッドでなにも怒らないからBのスレッドで怒り爆発だろ
この程度の基本的な枠組みの常套手段すら確立されてないなんて・・・
されてるってw
2ちゃんねるは世界の全てではない。
すいません。よくわからないので具体的に教えてもらってもいいですか?
unixでCPUコアが4つあって
1000人までクライアントを待ち受ける場合
・スレッドを4つ作る
・各スレッドでselect()をする
ってことですか?
その場合、各スレッド250人までをどうやって割り振ればいいんでしょうか?
均等に割り振る事ができるんでしょうか?
別にスレッドは4つである必要は無い。
スレッドを作らなくてもいい。
振り分けは適当でいい。
全部スレッドでもいい。
ワーカー数と各ワーカーの担当数の積が
最大せっちゃん数を
上回ってればどうでもいい
>>960 > 1000人までクライアントを待ち受ける場合
処理する内容を詳しく言わないとわからない。
スレッド数、ジョブの回し方は処理する内容に依存する。
4人対戦のゲームのサーバを想定しています。
1000人までのロビーがありゲームする部屋が10あるとします。
4人集まったらゲーム開始、サーバではゲームの進行やカードを配ったり
といった処理もさせます。
こんな感じのことをしたいのですが、どうでしょうか?
どうぞご自由に
967 :
876:2012/04/16(月) 22:49:16.49
うむ。どうやっても出来るから、まずは手を動かして作れよ。
OSがUnix系なら、Windowsに関する話は参考にならないよ。
>3 先頭のリチャードスティーブンスの本を、超おすすめする。
お前の人生上絶対、もととれる。
参考までに、俺なら
・4プロセス。
・各プロセスは別ポート番号。全く別のマシンであるかのように設計。
・1プロセスは1スレッド。
・長いトランザクションで1クラがサーバを占有しないよう
トランザクションを中断・再開できる工夫をする。
で組む。
マジレスだが、プロトタイプを各方式で作って実測し、
本チャンの方式を決定するのが王道だぞ。どんな案件でも、
方式設計でプロトの実測値がないと空中戦(机上の空論ばかりで
結論が出ない)になる。
「均等に割り振ることができるんでしょうか?」じゃねぇよ
アプリの特性を考慮してお前がそれを考えて、比較して、決定するの。
そんなレベルで1000人とか言ってないで
まず250人処理できる1個のサーバを作るほうが先。
968 :
876:2012/04/16(月) 22:57:49.50
もし本当に負荷分散を勉強しいなら、「ロードバランサ」製品が
どうやってるかを学んで、そこで振り分け先の「サーバ」を
「プロセス」に置き換えて考えてみやがれ。
参考まで:
http://www.networld.co.jp/slb/load_sharing.htm (俺は、お前さんが今やるべき事は違うと思うけどね)
>877 俺と君は意見が違うようだが、
Unixでselect(epoll等含む)するならブロッキングのままのほうが、
俺の経験上は楽だった(テスト工程とか)。
君がどうつくるのが好きかは君次第だから、君の言葉で語れ。
俺は否定しない。
>879 ソケットはブロッキングモードで、selectすれば
ブロックしないよう作れるよ。"Unixでは"その方が普通。
てかselectってそのためのものだよ。
syn reset してくる、普通じゃないクライアント(ポートスキャナ等)
の対策とか、高度な話はいろいろあるけど、今はそういう話じゃない
から割愛します。
>>968 そう。だからソケットはノンブロックが基本なんだよね。
select使うならなおのことブロッキングにしとく意味がない。
やっぱ、この程度の基本的な枠組みの常套手段すら確立されてないじゃんw
>>965 俺なら、
・部屋数プロセスを起動
・ゲーマごとにスレッド
・その他必要なプロセス(対戦者入り口、割り当てなど)とスレッド(カード配布する親など)。
ポートは、
・入り口 (*1)
・部屋ごと
でacceptして、前者のプロセスから後者のアドレス/ポート番号を聞き、
部屋プロセスとゲーマのクライアントは直接接続を張る。
こんなところから始めてみる。
開発では、最初は1プロセスのみで、1部屋4人だけのサーバを作る。ロビーとかなし。
部屋割り当てロジックは後から作る。
上の構成なら分離されてるので、独立に開発できる。
つまり、このスレの住人は、workerの仕様もわからないのに自分語りをはじめてしまうお馬鹿さんばっかということだね
そうだね。質問の直後はひどかったね。
>970
そうだよ。だからどうした。スタートはそこからだ。
それを理由におまいさんがネットプログラムやめてくれても
全く構わないし、「俺がガンダムだ」宣言して
各OS統一できる基本的な枠組みを作ってくれてもいいぞ。
そしたらおっちゃん嬉しくて涙出る。
みんな夢見て挫折した、死屍累々の歴史があるの。
俺はWindowsの64ソケット制限がガンだと思うんだが、
でもその分WinはUnixのAIOより非同期が明後日の方へ進化して
カッケェことになってるしなぁ。
>>976 だからどうしたって、されてないでしょと言ったらされてると主張した奴がいたから、
やっぱりされてないじゃんと言っただけなんだけど
なんか気に障ることでもあんの、おっさん
>>972 >開発では、最初は1プロセスのみで、1部屋4人だけのサーバを作る。ロビーとかなし。
スレッド(カード配布する親など)、これはゲーム進行をコントロールしている
スレッドって意味ですか?
それプラス4人の計5つのスレッド構成でやる感じでしょうか?
スレッドを駆使してやる理由を教えて頂いてもいいですか?
select()では駄目でしょうか?
やっぱりIDいるよな
もはやこのスレとは論旨が異なってきてる気がするな。
妥当なスレってないのかな。
>>976 64ソケット制限っておっちゃん浦島太郎なのか?
>>979 対ゲーマーのロジックに専念出来るから。
ちなみにマルチスレッド構成と、
selectは共存しうる。
1スレッドが複数の(I/O)イベントを対象いすることがありうるから。
イベントで全部済ますのは作るの楽でいいな
>>986 ありがとうございます。勉強になりました。
979を指針にして作成してみようと思います。
>>987 作るのはスレッドにしてしまったほうが楽だが。
>>988 間違いました。972でした。
ありがとうございました。
うめ
うめす
協力うめ
佐川梅三郎
うめ
1
2
3
ダー
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。