1.3 KiB
Threads & Async
We utilize different threads and mix smol with tokio.
Mid-term we want to get rid of tokio for the ethercat part but keep it for axum (REST) and socketioxide (SocketIO).
Threads
Main Thread from server::main::main
Main thread that inits the program and starts the other threads.
Listend to a channel for panics other threads can send via the send_panic function.
If the main thread recieves the panic signal it exits (exit(1)) the program.
ApiThread from server::api::init::init_api
Creates a tokio runtime for the init_api function which starts the axum & socketoxide servers.
Used send_panic to exit program if this thread panics.
Ethercat Interface Test Threads from server::ethercat::init::init_ethercat
Starts threads for testing different interfaces in parallel.
Uses Smol LocalExecutor.
EthercatLoopThread from server::ethercat::init::init_ethercat
Uses thread-local smol runtime.
Starts the Ethercrab TX/RX thread.
Runs the main control loop.
Used send_panic to exit program if this thread panics.
TODO: Should use realtime priority.
EthercatTxRxThread from server::ethercat::loop::setup_loop
Runs the Ethercrab TX/RX loop.
TODO: Should use realtime priority.
Used send_panic to exit program if this thread panics.