ファイルシステムでHello World
この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。
作者 R.J. Lorimer, 翻訳者 編集部 投稿日 2008年3月29日 午前12時59分
最新のハードウェア上で利用可能なプロセッサコアの数が増えるにつれて、新しいハードウェアを最大限活用するような方法で開発者が開発することが一層重要になっている。IBM Developerworks(source)はFork-Join並列処理ライブラリ上に複数部分からなるシリーズを公表したが、来たるJava 7リリースの一部としての出荷になる。InfoQでは以前に、Java 7の最初のfork/join提案(参考記事・英語)を、元々の作者であるDoug Leaのフィードバックを交えて取り扱った。Javaに関するfork/joinの概念は、元々Lea(source)が自身の論文「Fork/Join Parallelism in Java」(Javaにおけるfork/joinの並列性)(source)の中で紹介したものである。Leaのutil.concurrent パッケージはJSR-166(source)の基礎であり、Java 5でリリースされたjava.util.concurrentライブラリであった。fork/joinは単に、このJSRの修正である。前進するという、ハードウェアの傾向は明確です。ムーアの法則のより高いクロックレートは実現していないでしょうが、代わりにチップ毎のコア数増加は実現しているでしょう。ユーザー要求のような粒度の粗いタスク境界を使用することにより、1ダースのプロセッサをビジー状態にし続ける様子は想像に難くありませんが、このテクニックは何千個というプロセッサにはスケールしないので、トラフィックが短時間、急激にスケールすることがあっても、最終的にはハードウェア的傾向が勝利を収めるでしょう。多コアの時代に突入すると、よりきめの細かい並行性を見つけ出す必要があり、そうしないと、やるべき仕事はたくさんあっても、プロセッサがアイドル状態を保っているというリスクを冒すことになってしまうでしょう。遅れをとりたくないならば、優勢なハードウェアプラットフォームが移行すると同時に、ソフトウェアプラットフォームも同様に移行させなければなりません。この目的を達するために、Java 7には、特定クラスのより粒度の細かい並行アルゴリズムに相当するフレームワーク、fork-join フレームワークが含まれることになります。
fork/joinには分割統治テクニックが含まれています。問題を1つ選び、連続してより効果的に解決できるような大きさになるまで、その問題を小さなサブ問題に再帰的に分割します。再帰的なステップには、問題を2つ、もしくは3つ以上のサブ問題に分けて、サブ問題を解決するために待ち行列させ(fork ステップ)、サブ問題の結果を待ち(join ステップ)、そして結果を統合することを伴います。記事ではその後、fork/joinを使った併合整列アルゴリズム(source)を紹介している。
ParallelArraystudents = new ParallelArray (fjPool, data);
double bestGpa = students.withFilter(isSenior)
.withMapping(selectGpa)
.max();
public class Student {
String name;
int graduationYear;
double gpa;
}
static final Ops.PredicateisSenior = new Ops.Predicate () {
public boolean op(Student s) {
return s.graduationYear == Student.THIS_YEAR;
}
};
static final Ops.ObjectToDoubleselectGpa = new Ops.ObjectToDouble () {
public double op(Student student) {
return student.gpa;
}
};
double bestGpa = students.withFilter({Student s => (s.graduationYear == THIS_YEAR) })
.withMapping({ Student s => s.gpa })
.max();
現在のところ、Java 7は2009年始め頃のリリース予定になっている。この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。
あなたのチームが、既存アプリケーションを「シングルトンの入れ子」設計から依存性注入(DI)へ移行しようとしているなら、この論文に心引かれるでしょうが、DIへの移行は難しいことが分かっています。論文にはGoogleのJava DIコンテナ(Guice)の名を入れていますが、Javaや.NET、Python、Rubyなどにも当てはまります。
アジャイルの「自己組織化チーム」のパラダイムでは、チームのメンバに新しいスキルが要求されます。この記事では、発展しつつあるチームの自己組織化を壊さずに、新たなスキルを伝えるためのいくつかの戦略を提案します。そして、新しいスキルを身につけるのに役立つ資料のありかを提示しています。
今回の記事では、非同期ワークフローと呼ばれるワークフロー機能の面白い使用法を考察しますが、非同期ワークフローは.NETの非同期プログラミングモデルを単純化することを目的としています。
アーキテクチャは一般に、Word文書に主として見られるような極めて実体のない、ソフトウェアシステムの概念的な側面であるか、または完全に技術によって駆動されるものかのいずれかです。そのどちらも間違っています。では、どう対処すればよいでしょうか? この記事ではアイデアを説明します、そしてアプローチのキーポイントを要約します。
Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。
No comments
返信