ESP32並列処理のあれそれ

卒業研究を進んでいる今、実験用のデータを記録するプログラムと通信の役割を果たしているBLEプログラムを同時に走らせなければならない状況になりました。しかし、ESP32を制御するファームウェアmicropythonはどうやらマルチプロセスがサポートされていないようです。そのため、初めてマルチスレッドで並列処理によって実現する窮地に面しています。自分が見つかったESP32にマルチスレッドの実現方式は二つあります。一つはuaysnicoライブラリによってコルーチンという概念を入れた方法、もう一つは_threadライブラリでスレッドを直接に操作するような方法があります。

MicroPython Forum上にマルチスレッドの記事を探す途中で

「On ESP32, all MicroPython threads (of which there can be as many as you like) are pinned to the same core, and we rely on FreeRTOS to pre-emptively schedule them. They run with the GIL.」というコメントによって各タスクをスケジューリングして並列処理と同じく見えるように調整しなければならないらしいですね。GILとFreeRTOSどちらかも名前だけ知っている僕にとってはこれから時間をかけて、卒業研究を終わらせるように工夫していきたいと思います。

Leave a Reply