IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.
VM:java1.4.2 OS:WindowsXp マルチスレッドのプログラムで、一つのファイルにテキストの出力を行うところで、うまくいかないところがあります。 <ソースファイル> import java.io.*; import java.util.*; import java.text.*; public class ThreadIppai { public static void main(String[] args) { for (int i = 0; i < 100; i++) { Thread thread = new ThreadHontai(); thread.start(); } } } class ThreadHontai extends Thread { public void run() { try { for (int i = 0; i < 500; i++) {
一つのJavaプログラムについて、処理をマルチスレッドで並行性を持つように記述し、複数CPU(マルチコア)上でそのプログラムを実行することにより並列処理を実現しようとした際、ログ出力が実行性能にどれだけ影響を及ぼすのかを把握したい、と考えています。 プログラムの開発(特にデバッグ)においては、ログが使えないと苦労します。ただし、ログを埋め込むと、性能に影響を及ぼします。また、ログレベルを抑制し、実際にはログ出力がなかったとしても、ログレベルの判定処理が動くことで、多少の影響はあります。 最近のログ出力ライブラリはスレッドセーフに作られていますが、それは内部で排他区間を持つことになるので、並列処理においては排他による性能への影響は無視できません。 そこで、同一プロセス内でマルチスレッドにより並行実行するプログラムを作成・実行し、複数スレッドからログを出力すると、実行性能にどれだけ影響を及ぼす
File lockFile = new File("file.lock"); int retryCount = 30; // timeout = 3sec while (! lockFile.createNewFile()) { if ((retryCount--) == 0) { throw new LockFailedException("give up!"); } Thread.sleep(100); } try { // ファイルロックで保護された処理 ... } finally { lockFile.delete(); } マジックナンバーを使っていたり副作用のある式を条件式に使っていたりと、 気になるところはいろいろあるかも知れませんが、このコードの一番の問題は "File.createNewFile() に頼ったロック機構になっている" ことです。どういうことか簡単に説明して
ここ数日の佐藤先生のエントリが熱い! Erlang、Scala、Go、Javaなどの現代の言語(Erlangは古いか)における並行処理の扱い方について、それぞれの歴史的背景や意義、得手不得手などがわかりやすく紹介されてます。80年代から並行処理やオブジェクト指向を研究されてきた佐藤先生ならではの視点ですね。ちょっと長くなりますが特に私が興味深かった部分を引用します(強調は私): 佐藤一郎: Web日記 (2010年) 最近、興味深いのはオブジェクト指向言語のScalaやErlangが話題を集めていることでしょうか。どちらもActor Modelをベースにしているそうですが、オブジェクト指向言語の歴史でいうと、Actor Modelなどの並行処理用オブジェクト指向言語の研究が盛んになったのは1985年からの6,7年ぐらいだと思います(Actor Model自身はもっと古いですが)。そして19
Java7出たね。 Fork/Join見たときにこれExecutors(ThreadPoolExecutor)とFutureTaskで出来なくね? って思ったのでちょっと実験してみた。 サンプルの実装の内容は Taskが呼ばれると入力された数値回数分、hoge文字列をつなげます。 回数が多いときは数値を半分にして2つのタスクに分けて、実行します。 10を指定するとhogeが10行分表示されます。 まずは、今回のFork/Joinバージョン。 public class HogeForkJoin { static AtomicInteger callCount = new AtomicInteger(); public static void main(String[] args) throws Exception { long start = System.currentTimeMillis
xuwei_kさんが面白そうなこと(scala2.9のparallel collection の benchmark をしてみた)をやってたので、ちょっと自分でもやってみることにした。 準備 まずはScalaの最新版を取ってきてビルド。この辺を参考に。 さてscalaを起動 あとJVMの引数のXmx を 4096M にしてます との事なので自分もそれに倣う。Xmsも指定すべきか分からなかったので、意味もなく1024にしてみた。4096にしとけばよかったかもしれないけどまあよしとする。 ちなみにメモリのサイズ指定の仕方はここを参考に。 >set "JAVA_OPTS=-Xmx4096M -Xms1024M" >scala Welcome to Scala version 2.10.0.r0-b20110322031631 (Java HotSpot(TM) 64-Bit Server VM,
既存のプログラムを高速化どうすればよいか? たとえば、前回のリバーシのコンピュータの処理などような莫大な計算量を必要とするプログラムを高速化する手法として、近年ではマルチスレッドプログラミングが有効になってきています。 ここ何年か発売されているCPUの傾向として、処理能力を表すクロック周波数は3GHzから伸びておらず、Core 2 Duo、Quadなどのマルチコア化が進んできています。(余談ですが、PS3に搭載され、スーパーコンピュータ並の処理能力ということで話題になったCellプロセッサは1PPE + 8SPE = 9コア搭載されてます) 理由は、クロック周波数を向上させることが技術的に限界が近づいた為です。コア数を倍にすれば、理論上処理能力も倍になります。 しかし、コア数が増えれば既存のプログラムが高速に動作するようになるかというと、そうではありません。既存のプログラムの多くはシングル
原文(投稿日:2011/02/16)へのリンク Akkaは、Scalaで書かれたライブラリで、アクターモデルを使って、耐障害性のある、非常にスケーラブルなアプリケーションをJavaとScalaで書くことを簡単にする。 Carl Hewitt氏によって1973年に始めて提案されたアクターモデルは、Erlangのような言語に採用されて成功した。電気通信業会では、非常に高可用性のある、非常にスケーラブルなシステムが普通である。 Scala言語の生みの親である Martin Odersky氏が言うには、 Akkaアクターは、欲しい物をたくさん備えている。非常にスケーラブル、高パフォーマンスで、分散システムで非常に良く機能する。 プロジェクト リードの Jonas Boner氏が今日、Akkaは、1.0マイルストーンに到達した、とアナウンスした。InfoQは、氏にプロジェクトについてより詳しく聞いた
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く