Files
2025-05-05 13:10:50 +02:00

37 lines
1.3 KiB
Markdown

# 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`.
### `LoopThread` from `server::ethercat::init::init_ethercat`
Uses thread-local `smol` runtime.
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.