Dart 中线程、隔离和进程的区别

问题描述 投票:0回答:3

Dart 中的线程、隔离和进程有什么区别?

据我所知,Dart 是一种单线程语言,但它可以产生许多彼此不共享内存的隔离,我们可以对它们进行繁重的工作并返回结果,而不会阻塞 UI。

但是 Process 的用途是什么,它是 Isolate 的一部分吗?谁能更详细地描述以上三个。

当我们使用

Future
进行异步编程并让我们看看我们正在其中进行繁重的工作时,如果使用
await
关键字等待它,这是否会阻塞 UI 线程。

flutter dart
3个回答
1
投票

进程是一种本机操作系统(Unix、Windows、MacOS)构造,由一个或多个具有自己的地址空间和执行环境的线程组成。 在 Dart 中,一个应用程序由一个或多个线程组成,其中一个是主 UI 线程,其余的通常称为“隔离”。


1
投票

与之前的答案所述相反,所有 Dart 代码都在隔离中运行。

其实,根据你在评论中所说的,你的理解是正确的。

来自文档(强调我的):

在应用程序中,所有 Dart 代码都在隔离中运行。每个 Dart isolate 都有 单个执行线程,并且与其他线程共享可变对象 隔离。为了相互通信,隔离使用消息 通过。虽然Dart的isolate模型是用底层构建的 操作系统所使用的原语,例如进程和线程 提供,Dart VM 对这些原语的使用是一种 实现 本页不讨论的细节

许多 Dart 应用程序仅使用 one 隔离(主要隔离),但您可以 创建额外的隔离,启用并行代码执行 多个处理器核心。

你的问题还没有得到解答,也不会轻易回答,因为这取决于语言的实现。

另外,你的另一个问题:“当我们使用 Future 进行异步编程并让我们看看我们正在其中进行繁重的工作时,如果使用 wait 关键字等待它,这是否会阻塞 UI 线程。”

-> 是的,它会阻塞 UI,除非您使用另一个隔离。


0
投票

这是 isolates 官方文档所说的。

所有 Dart 代码都在隔离区内运行,而不是线程。使用隔离,您的 Dart 代码可以同时执行多个独立任务,并使用额外的处理器核心(如果可用)。隔离就像线程或进程,但每个隔离都有自己的内存和运行事件循环的单个线程。

当然,我们可以将isolate视为线程或进程。最大的区别是
每个isolate都有自己的内存空间,并且它们通过消息传递相互通信。

© www.soinside.com 2019 - 2024. All rights reserved.