日前接觸到一個3D列印機的項目,有兩種程式碼,一個是開源的Python printrun,另一個是閉源的C ,兩者皆使用的多執行緒方式。其中C 使用了開源的mlib來實現,這我可以理解。
就C 的程式碼來看,每個控制器分別控制位置、溫度、噴頭等,對應一個執行緒。底層透過同一USB/串列埠/CAN總線來實現的。
我還在查閱printrun使用多線程究竟和C 程式碼一樣是實作多個控制器線程,還是只是GUI與串口間的多線程。難道設計者不擔心Python的GIL會影響執行緒的效能?
此外,我還有兩個選擇:
將C 程式碼移植到基於RTOS的方式的驅動,或RT-Linux等類似平台上。
將Python改為多進程,而每個串列口採用asynio的非同步方式處理事件。
希望有過這類經驗的同學們傳授一下經驗。