1. We spawn up multiple client tasks (or what you can call "green threads") that can each handle tasks. These tasks are run on a threadpool which has multiple worker threads, kind of simulating multiple "application server instances"
- You can use `--connections` to set the number of client connections
- You can use `--threads` to set the number of threads to be used
2. An overall target is sent to these tasks and all tasks start executing queries until the overall target is reached
> The distribution of tasks across clients is generally unspecified, but because of Skytable's extremely low average latencies, in most common scenarios, the distribution is even.
3. Once the overall target is reached, each task relays its local execution statistics to the monitoring task
4. The monitoring task then prepares the final results, and this is returned
### Engines
There are two benchmark engines:
-`fury`: this is the new experimental engine, but also set as the default engine. It is generally more efficient and tracks statistics more effectively. At the same time, it is capable of generating larger consistent loads without crashing or blowing up CPU usage
-`rookie`: this is the old engine that's still available but is not used by default. it still uses lesser memory than prior versions (which used a very inefficient and memory hungry algorithm) but is not as resource efficient as the `fury` engine.