Javaではスレッドの優先順位が有効になるかどうか怪しいというのは書いたが、では他の言語/フレームワークはどうなのだろう?

 

C++ Suse Linux での例を読んだが、有効である

.net  VB.netの例を見たが、有効であった。

 

マルチスレッドを使ったプログラミングを考えると、Javaという選択はよろしくないのではないか?

ただ、目の前の仕事として、Javaで書かれたマルチスレッドプログラムを何とか効率よく動作させる必要がある。

何かやり方を考えねばなるまい。

丼といえば何? ブログネタ:丼といえば何? 参加中
 
丼ものはたいてい好きであるが、「所持金が少ないとき、どの店で何を食べるか」を紹介しよう。
 
まず店選び。吉野屋、すき屋、なか卯、らんぷ亭、てんや、などあるが、松屋をチョイス。
次にメニュー。肉の丼は濃い味付けが好みなので豚丼をチョイス。え、豚丼は味があっさりしている?いやいや、ここに松屋を選んだ意味がある。
松屋は定食メニューがあるためか、テーブルの上に調味料がいくつか置いてある。そのうち「カルビソース」を丼にかけるのだ。カルビソースがご飯にも染み込んで結構おいしくいただける。勝手に豚カルビソース丼と命名している。
このとき、ご飯はカルビソースとからみが悪いときがある。そういうときは少し時間をかけてカルビソースをご飯に絡ませるといいだろう。からみが悪い理由は、米の質なのか、炊き方なのか、炊きたてだからなのか、ちょっと調査が進んでいない。
 
なんとも貧乏くさい話であるが、自己責任でおためしあれ。
 

現状の処理では、内部の処理が溜まってしまう事象がある。メモリはバカ食いするが、CPUは遊んでいる状態でであり、ログから解析しても「スレッドに優先順位がない」のが原因だと推定している。上手に優先度を与えることでパフォーマンスはおそらく桁違いに改善されるだろう、と見込んでいる。タスクまたはスレッドに優先度をつけ、処理がスムースに動くようにしたいのだ。

 

Java 1.5 から Java.util.concurrent という「並列処理ユーティリティ」が追加されている。しかし、

この中でも、Futureを使った例は多いが、これは「非同期」でどれも並列である。優先度はつけられなさそうである。

「Javaのスレッドの優先度」をく調べていると困った問題を発見した。Javaのスレッドは、例えばSolalrsの場合、Java 1.5 なら2段階しかないらしい。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/vm/thread-priorities.html

他のOSでもOSごとに違うらしい。このような状態では使いたいと思えない。OSもバージョンが変わると扱いが変わるおそれがあるからだ。

 

他の方法を考えなければ・・。