アプリケーションの処理は主に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()
ソースコードで見ると、構造がわかりやすい。