Concurrency 什么';s*确定性并发*?

Concurrency 什么';s*确定性并发*?,concurrency,terminology,Concurrency,Terminology,我听说有3种并发 确定性并发 消息传递并发 共享状态并发 我知道#2(=演员模型)和#3(=一般线程),但不知道#1。那是什么?我以前没听过这个词,但我想到了。它们不提供“真正的”并发性,因为在任何特定时刻只有一个例程在执行,但它们是并发的,因为一组相互作用的协同程序都可以在不必等待对方完成的情况下取得进展。确定性并发是一种并发编程模型,因此在此模型中编写的程序具有以下特性:对于给定的输入集,对于任何执行计划,程序的输出值都是相同的。这意味着程序的输出仅取决于程序的输入 有很多方法可以确保这一点

我听说有3种并发

  • 确定性并发
  • 消息传递并发
  • 共享状态并发

  • 我知道#2(=演员模型)和#3(=一般线程),但不知道#1。那是什么?

    我以前没听过这个词,但我想到了。它们不提供“真正的”并发性,因为在任何特定时刻只有一个例程在执行,但它们是并发的,因为一组相互作用的协同程序都可以在不必等待对方完成的情况下取得进展。

    确定性并发是一种并发编程模型,因此在此模型中编写的程序具有以下特性:对于给定的输入集,对于任何执行计划,程序的输出值都是相同的。这意味着程序的输出仅取决于程序的输入

    有很多方法可以确保这一点。其中一种方法是所谓的单赋值编程,其中变量不必初始化,但最多可以赋值一次。读取未初始化的变量会暂停,直到它被赋值(可能是由其他线程赋值)。莫扎特编程语言支持这些


    另一种方法是使用所有权分析来确定哪些线程“拥有”不同的引用,并确保没有两个线程“同时”写入引用,因此不存在数据争用。

    它看起来肯定与协程无关:)不,我不认为它有关系,如果您假设并发意味着多个计算并行进行。但您可以在确定性并发模型(如单任务编程)中使用协同路由。