10.Dart - isolates隔离

个人学习用
不严谨
学习的话请看别的博客

void main(){
  /**
   * 为了解决多线程带来的并发问题,Dart 使用 isolates 替代线程
   * 所有的 Dart 代码均运行在一个 isolates 中。
   * 每一个 isolates 有它自己的堆内存以确保其状态不被其它 isolates 访问。
   */
}

互相发送消息

//dart是单线程模型的语言,但是开发中我们经常会进行耗时操作,比如网络请求,这种请求会阻塞我们的代码
//dart的并发机制 叫 isolate ,
//App的启动入口main函数就是类似于Android主线程的主isolate
//和java的Thread不同,dart中的isolate是无法共享内存的

import 'dart:isolate';

int i;

void main() {

  i = 10;

  //1.创建一个消息接收器
  ReceivePort port = new ReceivePort();

  //2.创建isolate线程
  Isolate.spawn(isolateMain, port.sendPort);

  //3.用接收器receiveport接受其他isolate发来的消息
  port.listen((message) {
    //发过来的sendPort,则主isolate也可以向创建的isolate发送消息
    if (message is SendPort) {
      message.send("接受消息成功~");
    } else {
      print("接到子isolate消息:" + message);
    }
  });

}

//新的isolate
void isolateMain(SendPort port) {

  //isolate是内存隔离的,i的值实在主isolate定义的,所以这里获取为null
  print(i); //null

  //1.创建一个消息接收器
  ReceivePort receivePort = new ReceivePort();
  port.send(receivePort.sendPort);
  //2.向主isolate发送消息
  port.send("我发送消息啦~~~");

  //3.接受数据的方法
  receivePort.listen((message) {
    print("接收到的isloate消息:" + message);
  });
}

##并行

import 'dart:isolate';

void main() {
  Isolate.spawn(iso1, "");
  Isolate.spawn(iso2, "");
  while (true) {}
}

void iso1(msg) {
  print("iso1 执行");
  Future.doWhile(() {
    print("1");
    return true;
  });
}

void iso2(msg) {
  print("iso2 执行");
  Future.doWhile(() {
    print("2");
    return true;
  });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱良浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值