# Examples
These examples demonstrate how to use thespis with the reference implementation (thespis_impl).
1. [*basic*](/basic.rs): the most simple example
2. [*desugar*](/desugar.rs): desugar the `Addr::builder` by creating everything manually.
3. [*across_yields*](/across_yields.rs): showing the use of &mut self across await points in handle trait method.
4. [*perf*](/perf): examples I use with cargo flamegraph or profiler.firefox.com to check where time is spent.
5. [*recipient*](/recipient.rs): Store addresses to several actors that accept the same message type.
5. [*recipient_any*](/recipient_any.rs): Store addresses to several actors that accept different message types.
6. [*addr_is_sink*](/addr_is_sink.rs): Shows how to you can use sink combinators on recipient
8. [*move_fut*](/move_fut.rs): Use address on the same thread, but move the future from call to a different thread before polling it.
9. [*local_spawn*](/local_spawn.rs): Use an Actor which is `!Send` and spawn it on a thread local executor.
10. [*concurrent*](/concurrent.rs): Let an actor process messages concurrently when no mutable state is needed.
11. [*concurrent_nursery*](/concurrent_nursery.rs): Let an actor process messages concurrently when no mutable state is needed. This time we make sure that none of the spawned subtasks can outlive our actor.
12. [*drop_channel*](/drop_channel.rs): An example of using a channel that overwrites older messages instead of providing back pressure.
13. [*supervisor*](/supervisor.rs): How to supervise an actor in case it panics.
14. [*tokio_channel*](/tokio_channel): How to use a tokio channel with thespis.
15. [*deadlock_prio*](../tests/deadlock.rs): Use a priority channel with thespis to give an actor a double mailbox and avoid a deadlock in a specific situation. Note you can also use priority channels like this for other usecases, eg. you can make a channel that will poll different addresses in an alternating pattern.