LoginSignup
2
3

More than 3 years have passed since last update.

Kotlin coroutine入門 ② ~ coroutine scope & jobについて~

Last updated at Posted at 2020-03-06

Kotlin coroutine入門①の続きです。
前回は、coroutineとは?から仕組み、launch、async、awaitの動きをみました。
今回は、coroutineをandoridで扱う上で知っておきたい coroutine scope & jobについて書いていきます。

CoroutineScope &CoroutineContextとDispatchersを理解する

CoroutineContext

CoroutineContextは、要素のセットです。 coroutineの文脈や環境の状態を表す値の集まりで、キーと値のペアとして情報を保持しています。主な要素としてはcoroutineのjobとDispatchersです。

端的に言うと Coroutineを利用するための情報が全て入っている。ここでCoroutineが実行される

Dispatchers

Dispatcher はコルーチンをどのスレッドで実行するかといったことを決定します。
以下のような種類があります。

Dispatchers.Main

UIに関する処理をするメインスレッドの指定です。

Dispatchers.Main.immediate

UI更新を即時行いたい際に使用されます。

Dispatchers.Default

共有スレッドプールを使用し、CPUのコア数に従って設定される。
CPUに負荷をかけるような計算をするような処理に対して使うことが推奨されます。

Dispatchers.IO

その処理に必要なコルーチンの数に応じて必要な分だけ共有スレッドプールを使用する。
DBの検索等、I/Oに負荷をかけるような処理に対して使うことが推奨されます。

Dispatchers.Unconfined

一度中断させて再開した場合は別スレッドに切り替わっている可能性があります。

job

任意のスレッドで行う仕事。launchなどCoroutineBuilderにて作成されたコルーチンはJobとして扱われる。

CoroutineScope

CoroutineScope とは、コルーチンが所属する仮想的な領域です。
コルーチンはいずれかのスコープに属します。
launch や async といったコルーチンビルダーは CoroutineScope の拡張関数として定義されているため、 CoroutineScope なしではコルーチンは起動できません。
前の記事でsuspend関数がCoroutineもしくはsuspend関数からしか呼び出せないのは、このためです。

以上の関係の全体を把握するにはここの関係図が分かりやすいです

alt

まとめ

前回launchやasyncで試したコードはCoroutineScope やContext Dispatchersによって動いていることが分かりました。
次はKotlin coroutine入門 ③~ViewModelの中でcoroutineを扱ってみる~

2
3
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
2
3