前言
貌似关于Dart
的文章没流量啊,就算在小编关怀上了首页,看得人还是很少的。
算了,今天持续发烧,再来写写如何使用 Dart
语言的并发操作。说起并发操作,玩 Go
的同学该笑了,这就是我们的看家本领啊。玩 PHP
的同学继续看看,表示我们光看不说话。
代码演示之前,我们先假设一个场景。假设我有一些漂亮妹妹,他们要出门旅行了,旅行的时候会发照片给我。在这里个过程中,代码需要做的事情:
- 接收请求
- 安排出行计划,同时出行哦,不能有先后之分
- 他们各自出行,可以发照片给我
- 返回结果
这个过程中,我关心的是他们能不能处理好自己的事情,因为我妹妹太多了,如果都让我帮他们,累死我也搞不定啊,我就干两件事,安排好出行计划,最后收照片。
代码演示一下吧
1 | dart复制代码import 'dart:io'; |
上面写了那么多,都是啥意思呢,我自己稍微解释下上面的代码。
Dart
里的并发,用到的是 Isolate
类。
Isolate
翻译过来即是 隔离区
, 是 Dart
实现并发的重要类。它并发的原理,既不是多进程,也不是多线程,你说类似于 Go
的协程吧,也不像。
真的很难定义它,期待对操作系统研究更深的同学来布道,当然这不影响我们使用。
Isolate.spawn
来定义一个并发任务,接收两个参数,第一个是该任务的处理函数,第二个是该处理函数的所需要的参数
ReceivePort
翻译一下 接收端口
, 也可以翻译成 接收器
,用来接收各个任务回传的消息。
receivePort.listen
用来监听各任务的回传信息,代码里只是简单打印
执行它,得到打印的结果
1 | bash复制代码2021-07-01 15:40:38.132122 开始 |
注意看打印结果,妹妹们很乖,基本在同一时间给我回复了消息。总共时间差不多3秒钟,你可以添加更多任务,都会是3秒钟。
再次封装一下
实际使用的时候,我们可以再次封装,使用的同学不用去想 Isolate
, ReceivePort
都是什么鬼
1 | dart复制代码import 'dart:io'; |
使用的时候,这样来:
1 | dart复制代码import 'dart:io'; |
走起来吧
1 | yaml复制代码2021-07-01 15:50:54.862973 |
可以看到,中间每一个任务完成的时间,都很接近,并发处理很完美
总结
当需要处理很多任务时,可以开辟多个隔离区,并发执行,提高效率。
Dart
语言对并发的处理,还算人性化,理解起来没有难度,用起来也容易。
同学们,骚起来吧。
本文转载自: 掘金