【並列処理】マルチタスクを学ぶ

アプリケーションの処理は主に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()

ソースコードで見ると、構造がわかりやすい。