プログラマーは、マルチコアプロセッサの出現と、それに先行するマルチプロセッサマシンに対応する1つの方法として、スレッドと呼ばれる概念を利用してきた。スレッドにはさまざまなタイプがあるが、一般的に言えば、スレッドとは1つの独立したコンピューティングオペレーションだ。では、プログラマーがマルチコアプロセッサを活用するには、各コアに1つのスレッドを割り当てればいいのだろうか。
そんなに簡単にはいかない。スレッドにはお荷物が付いてくる。それぞれのスレッドがメモリを必要とし、起動に時間がかかる。プロセッサに搭載されているコアの数によって、プログラムを異なる数のスレッドに分けなければならない。プログラマーは「ロッキング」の問題を気にしなければならず、あるスレッドですでに使用されているデータがほかのスレッドで変更されないようにするためのメカニズムを作成する必要がある。また、スレッドに分けられたプログラムが、同時に実行されている別のプログラムの領域に踏み込むこともあるかもしれない。
「Intel Threading Building Blocks」など、これらの問題を軽減するツールもあるが、スレッドが複雑であることには変わりがない。
「われわれはこの点を考えて、根本的に再検討する必要があると述べた。われわれは、マルチコア向けアプリケーションの開発を簡単にしたいと考えている。アプリケーション開発者が管理コードを記述したり保守したりしなくても済むように、管理コードの負担をOSに移している」(Hodges氏)
GCDの中核のメカニズムはブロックとキューだ。プログラマーは、ひとまとまりのコードにマークをつけて、それをブロックに変換する。次に、これらのブロックが実際にどのように動作するかを管理するキューの作成方法をアプリケーションに伝える。ブロックの実行は、ネットワークからの情報の受信、ファイルの変更、マウスのクリックといった特定のイベントに結び付けることができる。
Appleは、プログラマーがブロックの利点を気に入ることを願っている。従来のコードを、ブロックを使うように改変するのは簡単なので、プログラマーは大規模な再設計をせずにブロック化を試すことができる。また、ブロックは軽量で、稼働していないときはリソースを消費しない。さらにブロックは柔軟で、コードの大半をカプセル化することもできるし、小さな部分をカプセル化することもできる。
「スレッド化には大量のオーバーヘッドがともなうため、プログラムをできるだけ少ない数の部分に分けたいと考える。Grand Central Dispatchでは、われわれはプログラムを考えつく限り細かく分けるようにと言っている」(Hodges氏)
CNET Japanの記事を毎朝メールでまとめ読み(無料)
パナソニックのV2H蓄電システムで創る
エコなのに快適な未来の住宅環境
企業や自治体、教育機関で再び注目を集める
身近なメタバース活用を実現する
ZDNET×マイクロソフトが贈る特別企画
今、必要な戦略的セキュリティとガバナンス
ものづくりの革新と社会課題の解決
ニコンが描く「人と機械が共創する社会」