「Snow Leopard」が持つ技術--マルチコアの真価を引き出すために - (page 2)

文:Stephen Shankland(CNET News) 翻訳校正:川村インターナショナル2009年09月03日 07時30分

厄介なスレッド

 プログラマーは、マルチコアプロセッサの出現と、それに先行するマルチプロセッサマシンに対応する1つの方法として、スレッドと呼ばれる概念を利用してきた。スレッドにはさまざまなタイプがあるが、一般的に言えば、スレッドとは1つの独立したコンピューティングオペレーションだ。では、プログラマーがマルチコアプロセッサを活用するには、各コアに1つのスレッドを割り当てればいいのだろうか。

 そんなに簡単にはいかない。スレッドにはお荷物が付いてくる。それぞれのスレッドがメモリを必要とし、起動に時間がかかる。プロセッサに搭載されているコアの数によって、プログラムを異なる数のスレッドに分けなければならない。プログラマーは「ロッキング」の問題を気にしなければならず、あるスレッドですでに使用されているデータがほかのスレッドで変更されないようにするためのメカニズムを作成する必要がある。また、スレッドに分けられたプログラムが、同時に実行されている別のプログラムの領域に踏み込むこともあるかもしれない。

 「Intel Threading Building Blocks」など、これらの問題を軽減するツールもあるが、スレッドが複雑であることには変わりがない。

 「われわれはこの点を考えて、根本的に再検討する必要があると述べた。われわれは、マルチコア向けアプリケーションの開発を簡単にしたいと考えている。アプリケーション開発者が管理コードを記述したり保守したりしなくても済むように、管理コードの負担をOSに移している」(Hodges氏)

ブロック化して取り掛かる

 GCDの中核のメカニズムはブロックとキューだ。プログラマーは、ひとまとまりのコードにマークをつけて、それをブロックに変換する。次に、これらのブロックが実際にどのように動作するかを管理するキューの作成方法をアプリケーションに伝える。ブロックの実行は、ネットワークからの情報の受信、ファイルの変更、マウスのクリックといった特定のイベントに結び付けることができる。

 Appleは、プログラマーがブロックの利点を気に入ることを願っている。従来のコードを、ブロックを使うように改変するのは簡単なので、プログラマーは大規模な再設計をせずにブロック化を試すことができる。また、ブロックは軽量で、稼働していないときはリソースを消費しない。さらにブロックは柔軟で、コードの大半をカプセル化することもできるし、小さな部分をカプセル化することもできる。

 「スレッド化には大量のオーバーヘッドがともなうため、プログラムをできるだけ少ない数の部分に分けたいと考える。Grand Central Dispatchでは、われわれはプログラムを考えつく限り細かく分けるようにと言っている」(Hodges氏)

CNET Japanの記事を毎朝メールでまとめ読み(無料)

-PR-企画特集

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]