- - PR -
Processの非同期化について
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-14 14:47
こんにちは。
JDK 1.5で現在このように処理してます。 for (int i=0; i<5; i++) { Process process = Runtime.getRuntime().exec("cmd /c TEST.exe aa bb cc"); Integer waitFor = process.waitFor(); } これで、コマンドプロンプトで実行終了したのを確認できているのですが、 非同期化にしたい場合、単純にInteger行をコメントアウトして、続々に実行させたら いいと思っていたのです(投げっぱなし)が、パフォーマンスは同期化時と大差ありません。 ブレークポイントを当ててやって見ると確かにどんどん、cmdを実行しているようです。 私が勘違いしているのでしょうか? それとも、それぞれThreadで起こさないといけないのでしょうか? お分かりになる方いましたら、よろしくお願いします。 |
|
投稿日時: 2008-07-14 19:29
もっと、アプリケーションレベルの目的とか要求が具体的に分かってからお答えしたほうが、お互いすれ違いになるおそれが少ないと思います。なんのためになにをしたいのか…?
|
|
投稿日時: 2008-07-14 19:52
ありがとうございます。
目的ですが、現在この5回まわしている(5枚の画像出力)、一回のコマンド時間が 長い為です。 WEBアプリなのですが、5回分フルに待っていると、あまりにもクライアントが いらいらしてしまう為、とりあえず画面表示、クライアントが感じない裏でまだこの コマンドの処理が続行されている、と言う形をロジックにしたいと思っています。 この表示された画面から、これら5回分の画像が次の画面に表示される可能性があり、 チェック処理も加味しなければいけないのですが・・。 そういう場合を想定すると、ThreadでIDを保持しつつ、チェック時にそのプロセスID が生きてるかでチェックが出来そうなのですが・・。ただ、本心としてはThreadをkill するタイミングが難しく、あまりやりたくありません。 Runtime.getRuntime()で同期を取らない処理ができれば、これにしたいと思ってます。 (チェックは画像の存在チェックでごまかして・・) よろしくお願いします。 |
|
投稿日時: 2008-07-14 20:12
むむむ。Webアプリの画像出力(1回のリスポンスの中に画像が5つある)で、Runtime.exec()の出番なんかないと思うけど。いまいち、何をやりたいのか、まだ理解できませんね。
|
|
投稿日時: 2008-07-14 20:42
単純に画像のバイナリを返すサーブレットを作って、
その中でプロセス起動、待ち、バイナリを書き出すということをやればよいのでは? 非同期で処理をするということは、 結果を受け取れないということです。 処理結果を表示する都合があるなら同期で処理すべきです。 呼び出し元は単純にimgタグでよいでしょう。 |
|
投稿日時: 2008-07-15 15:07
ありがとうございます。
実現したい動機・動作は↓これに近いものです。 http://blogs.wankuma.com/nagise/archive/2007/10/11/101532.aspx ThreadをSessionに格納し、プロセスの状態を見て、 処理を分岐させると言うイメージですね。 まだ、処理中だったらWait、画像が存在しないのにプロセスが死んでる場合は、 再び実行・・なんていうイメージですね。それには、プロセスの状態を取得できる 事が必須ですね。 やっぱり、Threadになっちゃうんですかね・・。 |
|
投稿日時: 2008-07-15 18:18
Threadを使う事に抵抗がある理由が不明です。
|
|
投稿日時: 2008-07-15 19:38
> Threadを使う事に抵抗がある理由が不明です。
思いこんだらこれしかない!タイプ。 |
1|2|3
次のページへ»