10
2

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 3 years have passed since last update.

[Unity]UniTaskとTaskの違い

Last updated at Posted at 2022-03-18

はじめに

UniTaskとUnityに既存であるTaskとの違いメモ。

詳細テーブル

Task UniTask
機能 Unityでは不要な機能が多い Unityで活用できる機能のみ実装
オブジェクトサイズ 大きい 小さい
実行コンテキストの管理 TaskScheduler、SynchronizationContext UnityのPlayerLoop
必要なC# Version C# 5.0以上 C# 7.0以上
TaskTracker なし UnityEditorで確認可能
メモリアロケーション 常にヒープ ゼロアロケーションで駆動する
await時の制約 なし 同じUniTaskに対して2回awaitできない

Task

  • メインスレッドを動かしたまま、裏で通信を走らせたい時に使用できる。
  • 複数の処理を同時に実行して、完了までの時間を短縮したい時に使用する。
  • 描画には関係ない処理をメインスレッドから追い出して、動作の軽量化を図りたい時に使用する。

UniTask

  • UniTaskとはUnity向けに最適化されたTask実装を提供するライブラリ郡。
    • Unity向けTask実装「UniTask/UniTask」。
    • UniTaskの稼働状況をモニタできる「UniTaskTracker」。
    • Unity向けIAsyncEnumerable実装「UniTaskAsyncEnumerable」。
    • 名前空間「Cysharp.Threading.Tasks」

TaskScheduler / SynchronizationContext

  • TaskSchedulerは、タスクと実際にタスクを実行するスレッドと間の調整をします。調整とはタスクをどのスレッドに割り当てるか、あるいはタスクを実行する順番を管理すること。
  • SynchronizationContextは、「指定した処理を指定したスレッドで実行するために用いるオブジェクト」。

TaskTracker

  • Taskをチェックするツール。トラッキングを有効にしてスタックトレースを取得することは有用ですが、パフォーマンスに大きな影響を与えます。推奨される使い方は、タスクリークを見つけるためにトラッキングとスタックトレースの両方を有効にし、完了したら両方を無効にすることです。

メモリアロケーション

  • プログラムが、自分の仕事で使うメモリを確保すること。

    ヒープ

    • 動的に確保と解放を繰り返せるメモリ領域のこと。

    ゼロアロケーション

    • プログラムが、自分の仕事で使うメモリを確保することがないこと。
10
2
2

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?