プログラマーは、マルチコアプロセッサの出現と、それに先行するマルチプロセッサマシンに対応する1つの方法として、スレッドと呼ばれる概念を利用してきた。スレッドにはさまざまなタイプがあるが、一般的に言えば、スレッドとは1つの独立したコンピューティングオペレーションだ。では、プログラマーがマルチコアプロセッサを活用するには、各コアに1つのスレッドを割り当てればいいのだろうか。
そんなに簡単にはいかない。スレッドにはお荷物が付いてくる。それぞれのスレッドがメモリを必要とし、起動に時間がかかる。プロセッサに搭載されているコアの数によって、プログラムを異なる数のスレッドに分けなければならない。プログラマーは「ロッキング」の問題を気にしなければならず、あるスレッドですでに使用されているデータがほかのスレッドで変更されないようにするためのメカニズムを作成する必要がある。また、スレッドに分けられたプログラムが、同時に実行されている別のプログラムの領域に踏み込むこともあるかもしれない。
「Intel Threading Building Blocks」など、これらの問題を軽減するツールもあるが、スレッドが複雑であることには変わりがない。
「われわれはこの点を考えて、根本的に再検討する必要があると述べた。われわれは、マルチコア向けアプリケーションの開発を簡単にしたいと考えている。アプリケーション開発者が管理コードを記述したり保守したりしなくても済むように、管理コードの負担をOSに移している」(Hodges氏)
GCDの中核のメカニズムはブロックとキューだ。プログラマーは、ひとまとまりのコードにマークをつけて、それをブロックに変換する。次に、これらのブロックが実際にどのように動作するかを管理するキューの作成方法をアプリケーションに伝える。ブロックの実行は、ネットワークからの情報の受信、ファイルの変更、マウスのクリックといった特定のイベントに結び付けることができる。
Appleは、プログラマーがブロックの利点を気に入ることを願っている。従来のコードを、ブロックを使うように改変するのは簡単なので、プログラマーは大規模な再設計をせずにブロック化を試すことができる。また、ブロックは軽量で、稼働していないときはリソースを消費しない。さらにブロックは柔軟で、コードの大半をカプセル化することもできるし、小さな部分をカプセル化することもできる。
「スレッド化には大量のオーバーヘッドがともなうため、プログラムをできるだけ少ない数の部分に分けたいと考える。Grand Central Dispatchでは、われわれはプログラムを考えつく限り細かく分けるようにと言っている」(Hodges氏)
CNET Japanの記事を毎朝メールでまとめ読み(無料)
地味ながら負荷の高い議事録作成作業に衝撃
使って納得「自動議事録作成マシン」の実力
先端分野に挑み続けるセックが語る
チャレンジする企業風土と人材のつくり方
NTT Comのオープンイノベーション
「ExTorch」5年間の軌跡
すべての業務を革新する
NPUを搭載したレノボAIパソコンの実力
日本のインターステラテクノロジズが挑む
「世界初」の衛星通信ビジネス