Snow Leopardの深層・その2
マルチコア時代の新機軸! Snow LeopardのGCD
2009年09月02日 18時15分更新
GCDとは何か?
言語を機能拡張した「Blocks」も用意
前述のように、GCDはSnow Leopardが用意する並列化のための枠組みだ。
GCDの中には、CPUやスレッドを管理するエンジンがあって、必要なときに必要なだけのスレッドを起こしてコアを実行してくれる軽量なAPIも「libdispatch」というライブラリにまとめられている。このエンジンがGCDの要になっていることは、アップルのウェブページにあるとおりだ(関連リンク)。
だが、それだけではない。
このエンジンに処理を渡し負荷を分散させ並列化を推し進めるため、アップルはプログラミング言語「C」そのものを改造するという決断をした。
この機能拡張は「Blocks」と呼ばれており、プログラムを意味ある塊(ブロック)に区切って、それを変数に代入したり、ほかの関数に渡すことを可能にする。Rubyなどのスクリプト言語(高級言語)で「クロージャ」などと呼ばれている機能を、CというよりCPUに近い低級言語で実装したのだ(Blocksの詳細は「ASCII.technology 2009年9月号」に掲載)。
また、ブロックをObjective-Cのオブジェクトとして扱うための、より高レベルのフレームワークも用意されている。このためGCDは特にMac OS XのAPI「Cocoa」との親和性が高く、Cocoaアプリケーションの並列化に威力を発揮する。
例えば、OS標準のメールソフト「Mail」のような、フロントエンドはGUIでユーザーと対話しながら、バックエンドでサーバーと通信してデータをやりとりするようなアプリケーションでは、GCDにより64bit対応以上に高速化が期待できる。
GCDを使っても開発にほとんど制限がかからない
Cocoaとだけ親和性が高いわけではない。「CoreNetwork」や「CoreFoundation」といったCocoaの下の「Carbon」や「CoreService」に属するAPIもGCDの利用が前提となっていて、Blocks が利用可能だ。それどころか「LibC」と呼ばれる基本ライブラリも対応している。GCDを使ったからといって、ライブラリやフレームワークが制限されるわけではないのだ。
そして、いくら言語仕様やフレームワークがよくできていても、それだけでは開発は楽にならない。GCDによる並列化の開発を支援するツールも用意されている。
エンジン、言語の拡張、フレームワーク、システムレベルのAPI、ツール──。これらすべてを用意して、万全の準備の元にアムダールの法則と正面切って戦おうというのがGCDなのだ。
GCDの仕組み
プログラマーに優しい仕様
さて、GCDの中心は、libdispatchにより提供される並列化エンジンである。キュー(Queue)と呼ばれる待ち行列が用意されており、そこにBlocksでくくられたコードの「ブロック」をぶら下げて、逐次、または並列に実行する、という仕組みを採用している。
「キューによる待ち行列を並列化して実行」という手法自体は、さして目新しいものではない。GCDで重要なのは、この並列実行を自動的に判断してくれるので、プログラマー側がいくつスレッドを用意してどのキューを実行させるかというのを考えなくて済むという点だ。
これはプログラムをレストランと考えてみると分かりやすい。単純に特定のキューやタスクにスレッドを割り当てるというのは、店員(スレッド)を厨房やホールの接客、レジ打ちなどに固定して仕事(キュー)をさせるようなものだ。ホールにだけたくさん店員を割り当てても、厨房の処理が回ってなければ注文が滞ってしまうだけだろう。
一方、特定のキューにスレッドを固定するのではなく、スレッドを集めて必要に応じて分配する「スレッドプール」という考え方もある。レストランで言えば店員が厨房もホールもレジもこなせて、忙しさに応じて担当人数を変えていくようなものだ。
スレッドプールは固定的にスレッドを割り当てるよりは効率がよくなるが、いくつのスレッドをあらかじめ準備しておくべきかといった予測が難しい。そう、そもそも店員(スレッド)が多すぎると余計な経費(リソース)がかかるだけで効率は上がらないし、少なければ店が立ちゆかない。
libdispatchによって提供されるGCDのエンジンは、まさにこの部分を自動化してくれる。適切なキューにスレッドをぶら下げておけば、あとはGCDがこうした複雑な問題を対処してくれる。
要は自らレストランを経営するのではなく、腕のいいマネージャーを雇うようなものだ。GCDはSnow Leopardにもれなく付いてくる。わざわざ優秀なマネージャーをほかから探してこなくても、そこに待機しているのだ。使わなければソン、だろう。
この連載の記事
-
第8回
iPhone
Macのバックアップ、Time Machineで始めよう! -
第7回
iPhone
もふもふしたい! Snow Leopardの赤ちゃんを激写 -
第6回
iPhone
18年越しの大改修! Snow LeopardのQuickTime X -
第5回
iPhone
GPUをフル活用する、Snow Leopardの「OpenCL」 -
第3回
iPhone
やっぱりスゴい! Snow Leopardの「64bit対応」 -
第2回
iPhone
一挙30連発! 画像で見るSnow Leopard新機能 -
第1回
iPhone
Mac OS X「Snow Leopard」インストール完璧ガイド -
第-1回
iPhone/Mac
もっと知りたい! Snow Leopard - この連載の一覧へ