【问题标题】:Interleaved execution of while loops in the Dart language using async and await在 Dart 语言中使用 async 和 await 交错执行 while 循环
【发布时间】:2017-10-04 14:32:45
【问题描述】:

请在一个简单的 dart 代码 sn-p 中演示,在内部控制下执行计算(例如优化或模型拟合)的 while 循环(除了文件访问等不透明外部上下文控制的操作)可以交错运行方法。

我的假设是,除非在每个 while 循环中运行阻塞指令,例如文件访问或使用 Web 套接字,否则这是不可能的。

关于 dart 中异步编程的文档没有提到这个意义上的“阻塞”一词。 vertx(java应用程序服务器库)中的异步编程文档确实如此。但我不知道后者是否可以推广,因为平台可以实现关于异步编程的不同意图。

【问题讨论】:

    标签: async-await dart blocking nonblocking


    【解决方案1】:

    Isolate 类可以在 VM 中运行多个线程或在浏览器中运行 webworkers。

    编辑:我的工作不是编写代码来证明这一点,或者代表您调用谷歌搜索“dartlang 示例隔离”。我的回答准确地回答了你的问题。您可以使用隔离运行多个线程,它们可以进行独立的长时间运行的计算,并通过端口相互通信。

    【讨论】:

    • 我可以就我的问题得出什么结论?你说隔离可以,但这并不能证明有一种方法可以交错包含耗时计算的异步函数来证伪我的假设……所以,它不能回答我的问题。
    【解决方案2】:

    我不确定你的问题是什么。如果我理解正确,您的假设是正确的。

    Dart 在每个隔离内部都是单线程的。每个隔离中一次只能执行一件事。

    这确实意味着从不执行异步操作的长计算不会与其他计算交错。

    如果计算执行异步操作(这意味着等待其他操作),那么其他操作会运行。

    【讨论】:

    • 很高兴知道,也许我对我的 vertx/java 经验感到困惑...... eventloop 可能在那里做不同的工作。在 java 上可以有多个线程。
    猜你喜欢
    • 2016-12-30
    • 2021-06-04
    • 2016-02-04
    • 2020-08-03
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多