こんにちは。
多人数が同時接続するオンラインゲームなどのサーバは、ひとりのユーザ(クライアント)にひとつのスレッドを割り当てて対応するものだと思っていました
基本的にはその考え方で正しいと思います。
ただ、少し前の32bitsマシンの場合、多数のスレッドを起動するとスタック用のアドレス空間が不足するので、C10K問題(=1万台規模のクライアント)に対応できませんでした。
例えば、1スレッドに1MBytesのスタック用アドレス空間を割り当てると、1M × 10,000=0x271000000なので32ビットを越えるアドレス空間が必要となり対応不可能なのです。
そこで、スレッド(この場合はスタック)を使わないで対処する方法が色々と提案されました。
しかし、十分な解は見つかっていないようです。結局、1つのスタックで複数のシーケンス処理を行う場合、どうしてもコールバック地獄に陥るので好ましくはないのですが、背に腹は変えられないという感じのようです。
現代のサーバは64bitsのアドレス空間を持ちますから、アドレス空間不足でC10Kに対応できないということはありえません。しかし、未だにコールバック地獄を味わっている人たちがいるらしいので、他にも制限があるのかも知れません。
シングルスレッドの多重化I/Oで数千人のユーザにほとんど同時に結果を返却することなど可能なのでしょうか?
マルチコアなCPUでシングルスレッドでのみ処理するのは「バカ」以外の何物でもないです。当該スレッドを実行していないCPUは遊んでますから。
1つのスレッドで多数の処理を行い、そのようなスレッドを複数使うと言う解を聞いたことがあります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/27 10:25
2019/10/27 11:09
2019/10/27 11:16