以前、こんな記事を書きました。
今でも上記は使えると思います。ただ、上記で紹介しているXDispatchは長らく更新されていません。
更新が途絶えたライブラリは、ある意味生きているとは言えません(将来的な意味で)
そこで、現在他の方による移植物がないか、探してみました。
見つけたのがこちら
Linux移植版:https://github.com/nickhutchinson/libdispatch
Windows移植版:https://github.com/DrPizza/libdispatch
実用性について
それぞれ、まだ私はちゃんと実際に試して検証等していません。
Linux移植版とWindows移植版はそれぞれ別の方が開発されているため、
以前の記事のように、Mac/Linux/Windows間で完全に同一コードを共有できるかもまだわかりません。
そもそも、それらの移植版のメンテナンスがいつまで続くかも、それはもうその作者さんの意志次第なので、なんともいえないですね。
っていうか、マルチプラットフォームGCDは世から求められているのだろうか?
マルチスレッドプログラミング・並列処理においてよく起きる問題を低減するマルチOSプラットフォームソリューションは、GCDだけではありません。
- Javaにおける
java.util.concurrent
- Scalaの
アクター
や並列コレクション
- C/C++における
OpenMP
や、未来のC++標準C++17
におけるParallelSTL
。
それぞれプログラミングにおけるアプローチが違うので、単純な比較はできませんが、これだけあるわけですね。
そもそも、本家Apple版GCDの利点は、スレッドプールをOSXが適切に管理することによって、OS全体で最高のパフォーマンスを出すことがメリットの一つだったわけで、LinuxやWindowsへの移植版が、そこまで高度な統合を果たしているかも未知数です。
そして、業界のトレンドとしては、関数プログラミングへの志向&マルチスレッドモデルからActorモデルへの移行が進んでいます。
さらに、OpenCLやらOpenACCなど、GPGPU系なども考えるともう、色々過渡期っすね。なんかオイラ、ようけわからなくなってきたよw
まとめ
ちょっと風呂敷を広げすぎましたが、少なくともこういうことは言えそうです。
- iOS/Macでの開発においてGCDを多用する人にとっては、LinuxとWinで同じ作法が使える、移植版の存在は魅力的ではないか。
- それ以外の人にとっては、C++11でクロスプラットフォームになった
<thread>
、OpenMP
、C++17でのparallelSTL
(これについては、実用できるのは相当先ですが)など、他のソリューションの方があっているかも。
なんか、それぞれアプローチの違う色んなソリューションを引っ張ってきたから、単純な比較もできないし、そもそも各ソリューションのベンチマークもしてないじゃんという、突っ込みどころ満載の手抜き記事になってしまいましたが、まぁ「マルチプラットフォームでワンソースで並列処理」という夢に一番近いソリューションは何か、というのを色々検討するのはそれなりに意義あることでは・・・ない・・・カナ?カナ?
という感じで無理やり締めて、そろそろビールの酔いが回ってきたので寝ますw(←夜酒しながら書いてた)