我有大量的状态机。有时,需要将状态机从一种状态转移到另一种状态,这可能很便宜,也可能很昂贵,并且可能涉及数据库读取和写入等。
这些状态更改是由于来自客户端的传入命令而发生的,并且可以随时发生。
我想并行化工作负载。我想要一个队列说“将这台机器从这个状态移动到这个状态”。显然,任何一台机器的命令都需要按顺序执行,但如果我有很多线程,我可以并行移动多台机器。
每个状态机我可以有一个线程,但状态机的数量取决于数据,可能有数百或数千;我不想要每个状态机都有一个专用线程,我想要某种类型的池。
我怎样才能拥有一个工人池,但要确保每个状态机的命令都严格按顺序处理?
更新:想象一下Machine
实例有一个未完成的命令列表。当线程池中的执行器完成了一个命令的消费后,如果它有更多未完成的命令,它将Machine
返回到线程池的任务队列中。Machine
所以问题是,当你追加第一个命令时,如何原子地放入并确保这都是线程安全的?