質問: C言語のプログラムを書いています. 現在ネットワークのソケット通信部分をマルチスレッドの形にしてプログラムを書いているのですがサーバプログラム側の性能(実装方法?)の問題で処理の待ち受けが発生してしまっています. そのためマルチスレッディングで同時アクセスすることをやめ, スケジューリングを行い, 一定期間で処理を連続して行おうということを考えました. ただし処理時間の制約が非常に強く, 例えばマルチスレッディングをやめてシーケンシャルにアクセス...といった実装はできないです. どのような解決方法があるでしょうか? 現在はこちらから送るリクエスト数の合計は5000くらいを想定していて, 同時にスレッドを作成し, 通信していますが だいたいサーバ側で処理の待ち受けが発生するのは同時アクセス数150あたりからのようです. 考えたのは150アクセスごとに分け, スケジューリングをして適切な感覚で送信することなのですが実装方法がいまいちわかりません. よろしくお願いいたします.
回答: セマフォを使って同時リクエスト数を100くらいに制限しては如何でしょうか? セマフォの内カウンティングセマフォと呼ばれるものが使えると思います。 Windowsならこの辺が参考になると思います。 その他のOSについては私は分かりませんが、linuxもありそうです。