进程的同步与异步

世界可以从程序员那里学到很多东西。 他已经在学习,但没有错误的方法。 例如,我采用了流程和算法,但没有注意到这种异步方法。

任何程序员都了解什么是同步和异步。 这就是程序员对此了解的程度,因此对于普通的流程开发人员来说是难以理解的。

进程的同步动作是在一个进程实例中的主线程中执行的动作。 同步模式之间的主要区别:下一个动作仅在上一个动作完成时才开始。 因此,直到一个动作完成,该过程才是关键。

异步动作是在同一流程实例或完全在另一个流程中与主线程并行运行的动作。 异步模式之间的主要区别:并行执行流程的两个或多个分支。

同步程序(如程序)更容易编写和调试,因此这种流程设计方法非常普遍。 异步有很多关系,特别是与过渡到并行执行并返回主流的过渡点的指定有关。 生活中没有承诺。

例如,根据要求进行相同的采购过程。 它是按照标准的操作顺序绘制的:出现了申请,供应商选择了供应商,要求时间和成本,与卖方或内部控制部门达成协议,为供应商创建了订单,要求交易对手在法律部门或会计部门进行评估,创建了付款请求,等待付款,监视订单,然后组织或跟踪仓库中的过帐,以便最后关闭应用程序。 该过程是完全同步的。

现在想象一下-在我们的信息系统中,评估供应商的服务未连接。 因此,法律部门需要从开放源中收集信息。 这意味着评估需要时间。 考虑到向律师提出的申请队列,将过去三天。

此时,流程将发生什么? 根据同步逻辑,它将立竿见影。 作为系统的真正组成部分,供应商在收到供应商的评估之前不会松动手指,尤其是在对未经验证的交易对手采取制裁措施的情况下。

我们可以在这里添加异步吗? 当然可以 在那一刻,当供应商选择供应商时,他可以将对对方的评估申请发送给法律部门,同时他将协商,协调价格和条款。 到他准备下订单时,评估就会及时到达。 该过程将在三天前结束。

当然,律师会很生气-如果您尚未明确确定供应商,我们将如何评估供应商,您会向他订购吗? 他们应该回答什么?

该解决方案表明了自己,我们已经在上方进行了说明-连接供应商评估服务。 现在,我们甚至更好地了解了为什么需要这样做-以便实现异步并加快该过程。 虽然,该服务可能只是同步的。 你觉得呢

如果未连接服务,则可以通过“未来使用”的工作来证明该评估是合理的。 如果您的信息系统有记录评估数据的地方,那么下次您需要与该供应商合作时,您不再需要联系法律部门。 当然,评估有一个有效期,但是可以在一定的合理范围内使用。

在异步中,缺少保证通常很可怕,也就是说,在流程的并行分支之一中出现负面结果的风险。 如果对帐失败,该怎么办?

在这里,您需要统计数据。 如果您正在使用现有流程,则可以近似或准确地想象某些操作多长时间以负面结果结束-例如,协调。 正是出于这种可能性,应该开始并行执行。

异步直接乞求所有协调过程。 如果您仅以同步模式在那里工作,甚至跟随协调员的领导,那么就会建立起相互依存的长链,从而产生官僚主义和共同责任。

一个典型的例子是:“我只有在他同意后才会同意。” 或者“我只会在融资人之后才看这份合同。” 尽管根据统计数字和常识,这种陈述是没有道理的,而只是转移责任的一种方式。

这里最主要的是不要担心,也不要立即解决所有问题。 尝试选择异步模式的第一个协调分支。 可能有必要修改任务,协调参数-以消除相互依赖性。

例如,让站在合同批准链中的财务部门仅查看付款条件。 让他有自己明确的评估标准。 最好以示范合同的形式将其正式化-例如,供应商的100%后付款,买方的100%预付款。 在这种情况下,符合条件的合同将一次滑倒。 金融家将没有理由等待同一位律师的评估。

唯一重要的是:如果没有自动化,异步过程将很难实现。 如果流程,其执行和跟踪仅在纸上实现,那么添加并行分支将使它们陷入混乱。 需要自动化。

“自动任务”的原理最适合此类自动化。 虽然,您可以通过现代平台中的标准绘图方法来解决问题,但是您只需要修改即可。

标准的流程“绘图”将要求您标识整个流程,所有分支和关系。 如果过程复杂而漫长,那么您将遇到一个问题-它只会在宽度上不再适合屏幕。 如果您是在学院以程序员的身份学习的,那么请记住设计算法的规则:最多三个平行的垂直分支。 该规则不仅是被发明的-如果有更多的分支,理解算法方案将是有问题的。

自动任务消除了这个问题-根本没有过程的图像,因为 没有这样的实体-一个过程。 有任务。 如果确实需要,可以从它们组合一个过程。 但并非相反。 一种绘图过程的演绎方法。

除了异步之外,还有一种更强大的优化方法-进程缓冲。 关于他-又一次。

Source: https://habr.com/ru/post/zh-CN453192/


All Articles