Web開発者ブログthin+sinatraで同時続接2012-05-23Tweetthinを使ってsinatraを動かすと複数のリクエストを同時に処理できるようになります。--threadedとすることでsinatraのルーティングをマルチスレッド化出来るようです。2検証1http_loadを使って同時接続しています。2アクセスを2同時接続で実行しました。して1秒後に結果を出力するようにしています。http_loadによってリクエストは同時に2個投げられていますが1つずつ処理が実行されているのがわかります。秒でリクエストが完了しています。二つのリクエストがほぼ同時に処理されたということがわかります。調整する必要があります。21検証2同時接続数が20までならほぼ1秒で処理が終わっています。同時接続を21にした途端に処理が倍の2秒かかっています。thinはEventMachineを使ってマルチスレッドの処理を行なっています。EventMachineで扱えるスレッドの数はデフォルトでは20となっています。20スレッドを超えてスレッドを生成しようとすると処理待ちの状態になるようです。この制限を変更したい場合にはプログラム中に次のように設定します。100これで100リクエストまで同時に処理を行う事ができます。注意--threadedオプションを指定した場合にはsinatraをマルチスレッド対応でコーディングする必要があります。マルチスレッドではI/Oに同時アクセスされるという状況が頻発しますのでMutexやflockなどをつかって排他制御する必要があります。