Wednesday, 9 July 2014

Servlet and Multi Thread

Web Server 込のDatabaseの性能を測っているわけなんですが、今頃になってわかったのが、

Servlet は一回に一つずつしか処理しない

ええ? ってわけで学生になんとかしておいてねといったのですが、らちがあかず。まぁ、そうだよな。で、いそいそ出動したんですが、

異なるpathなら、serialize されない

ふーん。ということは、session が異なれば multi thread で動くってことか? でも、セッションとか要らないんだけどな。

ぐぐってみると、

Server の中で thread 作るなバーカ

みたいなのがあったり。ところが、

Servlet 3.0 では Asychronous Context

なるものがあり、jetty 8 から使えるらしい。Server から thread pool 取ってきて、

AsyncContext aCtx = request.startAsync(request, response);

で、thread pool で thread 作って、

aCtx.complete();

とすれば良いらしい。なのだが、

何故か激遅

まぁ、そうだよね。そもそも、accept() は multi threaded にやっているはずなので、

一旦、Servlet 毎に serialize しているアホ

が、どこかにいるはず。たぶん、

ServletHandle

だろう。なので、Handler を自分で書くのが良いんじゃないだろうか。 つうか、既になんかあるはずなんだけど。まさか、accept() が single threaded とか?

No comments: