アプリケーションの処理は主にCPUバウンド(CPUの計算処理)とI/Oバウンド(ディスクからの読み込み、入出力取得等)の2種類に分類される。
CPUバウンドの負荷は並列化によりパフォーマンスが改善される可能性がある。
スレッドごとに別々のタスクをループで実行
import typing as T from threading import Thread, Event from pacman import get_user_input, compute_game_world, render_next_screen processor_free = Event() #processor_free_set() class Task(Thread): def __init__(self, func: T.Callable[..., None]): super().__init__() self.func = func def run(self) -> None: while True: processor_free.wait() processor_free.clear() self.func() def arcade_machine() -> None: get_user_input_task = Task(get_user_input) compute_game_world_task = Task(compute_game_world) render_next_screen_task = Task(render_next_screen) get_user_input_task.start() compute_game_world_task.start() render_next_screen_task.start() if __name__ == "__main__": arcade_machine()
ソースコードで見ると、構造がわかりやすい。