在Cadence/Temoral工作流编程中:
工作流执行必须是确定性的。这是历史回放重建线程状态所必需的。为了具有确定性,Cadence/Temporal以合作方式控制线程调度(而不是像大多数操作系统那样抢占):
因此:
HashMap
在工作流代码中使用是安全的。节奏/时间 SDK 具有确定性运行器来操作线程执行。例如 Java SDK、高浪 SDK。此确定性运行程序将决定以正确的顺序运行哪个工作流线程,并且一次运行一个工作流线程。对于每个决策任务,它将循环执行,直到“所有线程都被阻塞” - 运行全部阻止/执行全部阻止。
异步过程
/异步函数
/工作流。Go
将创建一个新线程并添加到确定性运行器中的列表中,以便控制执行。
因为任何时候只能执行一个线程,所以我们在常规代码中遇到的大多数竞争条件都不会发生。
但这并不意味着完全没有竞速条件,在某些情况下,还是会有条件造成一些死锁。
换句话说,合作并不意味着没有竞争条件或死锁。这只是意味着死锁情况要少得多。并且没有像抢先线程调度那样导致脏读的竞争条件。
如果threadA抓取lockA并等待一个活动,那么它会屈服于threadB,然后threadB抓取lock B并等待一项活动;
活动结束后,线程 A 将在释放锁 A 之前尝试获取锁 B,线程 B 将在释放锁 A 之前尝试获取锁 A;
现在,当活动完成时,它们将陷入死锁。
https://community . temporal . io/t/how-do-workflow-thread-synchron ization-work/504
我计划将 Cadence 或临时工作流用于架构,但我们计划在决定工作流时为用户提供很大的权力。在他们的用例中,节奏和时间都提到他们的SDK支持自定义DSL,但我看不到该功能。你能帮帮我吗?
将是什么 线程不足,无法执行工作流。如果此消息始终显示,请选择WorkerOptions。应减小maxConcurrentWorklfowExecutionSize或WorkerOptions。maxWorkflowThreads增加。 处于阻塞状态的工作流在内存中保持活动状态??处于等待状态的工作流是否持续检查条件??更多的 -
为用户可视化节奏工作流的最佳方式是什么? 我想在一个高层次的视图中向用户展示工作流的不同步骤(类似于大多数食品配送应用程序的功能:下单- 我对向用户展示实际执行的节奏活动不感兴趣,因为我不希望他们看到我的工作流程的详细信息,我只想可视化他们感兴趣的某种高级阶段。 一种方法是保留工作流的高级描述,并在工作流代码本身内部进行状态转换(在启动活动 X 时将阶段 Y 标记为已启动等)。但是,我试图将这个问
我正在探索Cadence,有一个关于故障恢复的问题。我知道工作流是容错的(工作流历史被维护),以防工作流工作人员失败。我找不到活动工作人员的相同保证。例如:假设一个活动对服务A进行了RPC调用,这改变了一些远程对象状态;现在,让我们假设调用成功了,但活动工作人员在通知Cadence服务之前丢失了。在这种情况下,Cadence会在一个新工作人员上再次安排活动吗? 我知道如果服务A是幂等的,上述可能不
在执行任务时,如果出现故障,希望定义配置以在一定间隔后重试并从失败的任务中恢复。是否可以实现恢复选项?
当使用像文档建议的那样的信号时: 我可能会遇到以下问题: 我想保证一次处理一个FIFO 我想处理signalWithStart的“赛车状态”,其中信号方法调用得太早 我想安全地重置工作流。重置后,可以在历史早期重新应用信号 我想确保工作流不会在信号处理之前提前完成