-
Notifications
You must be signed in to change notification settings - Fork 2
Ennoumuの処理割り当てについて #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Queue待ちのいずれかのプロセスに割り当てられます。それがラウンドロビンなのか、最後にリクエストを出したプロセスなのか、といった実装詳細はマイクロソフトの実装の問題で、ドキュメントはされていないのでわかりません。 |
いつもながら、早い回答ありがとうございます。 http.sys 任せという感じでしょうか? 重いプロセスとは、例えば大きなファイルのダウンロードなどで、Responseがなかなか返り切らないプロセスのことを言っています。CPUがぶん回って、他のスレッドを止めてしまうということではありません。 例えば、4つプロセスを起動している状態で、一つのプロセスが大きなダウンロードを始めたとすると、他のすぐにレスポンスを返すようなRequestのResponseが返ってこなくなります(何度かは動くので、順番にプロセスを割り当てられて、最終的にダウンロードを実行しているプロセスにRequestが行っているのではないのかと推測した次第です)。 |
#http.sys 任せという感じでしょうか? これでうまく動くようならば、マルチプロセス+マルチスレッドのennoumuと、マルチプロセス+シングルスレッドのennoumuを構成で切り替えられるようにしてみます。 |
回答ありがとうございます。 失礼しました。Ennouはマルチスレッドで動作していたのですね。 今一度、能楽堂のマニュアルを読み返したところ、 私が動作確認するのに、リクエストのレスポンスが返ってこない状況を作るべく、テストコードとしてSleepを埋め込んでいました。 質問ばかりですいません。 用意していただいたシングルスレッド版で確認したところ、リクエストが止まることはなくなったようです。 |
RubyのsleepはGVLを解除する(なので、別スレッドが動く)ので、そのSleepというのが何か次第です。WindowsAPIを呼んでいるのなら、その通りです。tiny_tdsは以前見たときはRubyのソケットを使っていなかったのでブロックされると思います。Rubyのsystemはブロックしないはずです。 |
お世話になっております。 rails アプリを新規に generate し、20秒待ってレスポンスを返すアクションと、即座にレスポンスを返すアクションの2つを作成し、両者を同時に実行した場合、やはり、20秒の方が終了するまでリクエストが処理されないようです。 class WaitController < ApplicationController end
EnnouでもEnnoumuでも同様になります。 よろしくお願いいたします。 |
いつもお世話になっております。 よろしくお願いします。 |
そうです。それで合っています。たとえば、rackup -s Ennoust などです。 |
ありがとうございます。 ちなみに、ennoust.rb の 42行目の -s Ennoumu は -s Ennoust の typo ですよね? |
いつもお世話になっております。
Ennoumuで複数プロセスを起動している場合に、リクエストに対して割り当てられるプロセスの決定はどのように行なっているのですか?
単純にラウンドロビンで割り当てられるのでしょうか?
複数プロセス起動時、あるリクエストがたまたま重い処理を行なっている場合、軽いリクエストまで止まっているようなので、このような質問をさせていただきました。
The text was updated successfully, but these errors were encountered: