Fre*_*ind 6 global-variables dart dart-isolates
我看到“ Dart是一种单线程编程语言”,所以我认为使用全局变量在函数之间传递数据是安全的:
var g = 1;
main() {
hello();
world();
}
def hello() {
g = 2;
}
def world() {
print(g);
}
Run Code Online (Sandbox Code Playgroud)
我还看到“ Dart提供隔离”并且可以在多核上运行。这意味着如果不同的隔离株访问相同的全局变量可能会很危险,对吗?
安全吗?如果不是,是否有任何方法可以在函数之间共享对象而不将它们作为参数传递?
更新:
根据“ Florian Loitsch”的回答,我刚刚编写了一个针对带有隔离的全局变量的测试:
import 'dart:isolate';
var g = 1;
echo() {
port.receive((msg, reply) {
reply.send('I received: $g');
});
}
main() {
var sendPort = spawnFunction(echo);
void test() {
g = 2;
sendPort.call('Hello from main').then((reply) {
print("I'm $g");
print(reply);
test();
});
}
test();
}
Run Code Online (Sandbox Code Playgroud)
您会看到一个隔离将全局变量g设置为新值,而另一个隔离将打印的值g。
它打印的控制台:
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
Run Code Online (Sandbox Code Playgroud)
显然,它们不共享内存,并且全局变量是安全的。
Dart 在一个线程内是单线程的。因此,在全局变量中传递数据是安全的(虽然风格不好)。
隔离区有它们独立的堆(内存)并且不会相互干扰。全局变量保持安全。
我认为除了静态变量和参数之外,没有办法在函数之间传递变量。
| 归档时间: |
|
| 查看次数: |
2568 次 |
| 最近记录: |