16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【超入門】マルチスレッドぉ?そんなの後だよ!あ・と・ま・わ・し!

Last updated at Posted at 2015-01-10

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!!!
お試しあれ〜!!!

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?