Dart Isolates2024 年 8 月 29 日 | 4 分钟阅读 Dart 允许我们进行异步编程,这使得我们的程序在不被阻塞的情况下运行。 异步编程用于实现并发。 Dart isolate 是线程的一个版本。 但是,关于“线程”或“Isolates”的常见实现,存在关键差异。 Isolates 的工作方式与 Thread 不同。 Isolates 是独立的 worker,它们不共享内存,而是通过在通道上传递消息来互连。 由于 Isolates 通过传递消息来完成其任务,因此它需要一种序列化消息的方式。 Isolates 之间的通信通过消息传递完成,作为客户端和服务器。 它有助于程序开箱即用地利用多核微处理器。 Dart 提供了 dart:isolate 包,以将 isolate 应用于我们的程序。 它提供了解决方案,以采用单线程 Dart 代码,并允许应用程序更好地利用可用的硬件。 创建和启动一个 IsolateDart 提供了 spawn() 方法来创建一个 isolate。 它必须使用带有单个参数的“入口点”来声明。 此参数显示一个端口,isolate 使用该端口来引用回通知消息。 让我们理解以下示例 - 示例 -输出 execution from main1 execution from main2 execution from main3 execution from sayhii ... the message is :Whats up!! execution from sayhii ... the message is :Hello!! 输出 2 execution from main1 execution from main2 execution from main3 execution from sayhii ... the message is :Hello!! execution from sayhii ... the message is :Welcome!! 说明在上面的程序中,isolate 类的 spawn 方法并行执行一个函数 sayhii,剩余的代码也是如此。 它接受两个参数。
我们有两个函数 sayhii() 和 main() 函数,它们每次运行的顺序可能不一样。 如果你运行上面的程序,那么输出每次都会有所不同,正如我们在第二个输出中看到的那样。 注意 - 如果在生成的函数中没有要传递的对象,我们也可以传递 NULL 值。让我们理解另一个例子 - 示例 - 2说明在上面的代码中,我们创建了一个异步方法 start(),它创建一个端口并生成一个 isolate。 我们将 start 方法标记为 async,因为我们可以等待来自 isolate 生成的响应,并存储对新 isolate 的引用。 当我们想终止正在运行的 isolate 时,这至关重要。 我们在 spawn() 方法中传递了两个参数,第一个参数是 runTimer 方法,这是一个用于执行 runTimer() 的回调函数,第二个参数是 sendPort,它是一个回调函数,它将用于将消息发送回调用者。 start() 方法开始监听来自 isolate 的 receiverPort 的消息。 一旦它收到消息,它就会将其打印为控制台输出。 runTimer() 方法开始一个计时器,该计时器每秒触发一次以更新计数器。 它通过端口发送通知消息,该端口是在 isolate 被生成时收到的。 停止一个 Isolatedart: isolates 包提供了 kill() 方法,该方法用于停止正在运行的 isolate。 让我们理解下面的例子。 示例 - 说明在上面的例子中,我们声明了一个 stop() 方法,它将销毁正在运行的 isolate,并将其引用设置为 null。 我们定义了 isolate 的优先级:立即,它将立即终止 isolate。 完整的程序输出 Stating Isolate Hit enter key to quit Sending: notification 1 - Receiving: notification 1, Sending: notification 2 - Receiving: notification 2, Stopping Isolate 下一个主题Dart 异步 |
我们请求您订阅我们的新闻通讯以获取最新更新。