CPU十分に使ってますか?
Core i7使ってるあなた!そのCPUパワー余らせてませんか?
そのプログラム、もっともっと高速動作させてみませんか?
エンジニアなら誰しもがあこがれるマルチスレッドの高速動作。
そんな「魅惑」あなたも習得しませんか?
マルチスレッドの根本は非同期です。
非同期をマスタすれば、マルチスレッドなんかちっとも難しくありません。
そんな非同期をマスタするためのトレーニング&実装方法をお伝えします。
AndroidでもiOSでもWinでもMacでも、今はメインスレッド(UIスレッド)という
考え方というのがあります。
つまり、メインスレッドでマウスやキーボード、タッチ動作のイベントに対して
なにかを処理する、イベントドリブン型プログラムな訳です。
一方、プログラム言語は、基本上から下に「順次」「逐一」的に処理する書き方を
します。
それ故、普通にプログラムを書くと、メインスレッドで全部処理するようになってしまい、
CPUがさっぱり活かされません。
ではどうするか!
前述したとおり、マルチスレッドの根本は、非同期です。
じゃぁ、非同期になるよう、実装、トレーニングすれば良いんだ!
ということになります。
そのトレーニング方法は・・・
基本遅延実行にしてしまうことです。
Java(Androidを例にとります)だと
//Some Activity Start
_handler.post(new Runnable() {
@Override
public void run() {
//do something
Intent intent = new Intent(MainActivity.this, someClass);
startActivity(intent);
}
});
Objective-Cだと
//各種WebViewのキャッシュクリア
dispatch_async(main_queue, ^{
NSURLCache *cache = [NSURLCache sharedURLCache];
[cache removeAllCachedResponses];
});
こんな感じ。
とにかく、ある一定のブロック単位で、どんどん、後回しに処理を遅延実行
させてあげるように実装していきます。
メインスレッドにポイポイ処理を放り込んでいくイメージです。
ポイポイ〜〜〜ってね。
これだけ!
基本遅延実行させてあげるように実装するだけで、非同期の処理に頭を
ならしていくわけです。
そうすれば、非同期処理の勘所をつかめるようになり、
あーここは、同期入れてあげないと動かないなー等がわかってくるように
なります。
もうそうなれば、脱入門者!
同期は、mutexなり、同期オブジェクトなりで。
同期に関する記事は、そこら中にあふれていますので、そこは、他の記事に
任せます。
もし、リクエストがあれば、書きます。
ちなみに、上記のように遅延実行をさせてあげるだけで、アプリのレスポンスは
格段に良くなります!
別次元のアプリみたいになりますよ!
非同期の処理になれてしまえばもうこっちのもん!
後はスレッド起動させて処理させてあげるようにしてあげれば、マルチスレッド
プログラミングの完成です!
Let's try!!!
お試しあれ〜!!!