2.8 Dart 并发开发 Isolate
在Dart中并没有线程的概念,所有的Dart代码都运行在某个isolate中,默认环境就是一个main isolate
每个isolate都有自己的堆(Heap)和栈(Stack)
所以即使是全局数据,也彼此隔离
首字母大写的Isolate代表Isolate对象,小写的isolate代表一个独立的Dart代码执行环境
isolate仅在端口(Port)上通过消息进行通信,并且消息在接收前会进行复制
因此无法通过消息操作同一个对象
与线程类似但不共享内存的独立工作,仅通过消息进行通信
导入库:
Classes
Capability
An unforgeable object that comes back as equal when passed through other isolates.
Isolate
An isolated Dart execution context.
RawReceivePort
ReceivePort
Together with SendPort, the only means of communication between isolates.
SendPort
Sends messages to its ReceivePorts.
Exceptions / Errors
IsolateSpawnException
Thrown when an isolate cannot be created.
RemoteError
Description of an error from another isolate.
官方的文档资料(访问需要自己想办法)
https://api.dartlang.org/stable/1.24.3/dart-isolate/dart-isolate-library.html
https://api.dartlang.org/stable/1.24.3/dart-isolate/Isolate/spawn.html
Futurespawn(
voidentryPoint(message),message, {boolpaused:false,boolerrorsAreFatal,SendPortonExit,SendPortonError
})
Creates and spawns an isolate that shares the same code as the current isolate.
创建并生成与当前isolate共享相同代码的isolate(并不是共享内存,仅代码)。
参数指定在生成的隔离中调用的初始函数。入口点函数在新的isolate中作为唯一参数调用。
该函数必须是可以使用单个参数调用的顶级函数或静态方法,即,编译时常量函数值,其接受至少一个位置参数并且具有至多一个所需的位置参数。该函数可以接受任意数量的可选参数,只要它只能用一个参数调用即可。该函数不能是函数表达式的值或实例方法撕下的值。
通常,初始包含SendPort,以便spawner和spawnee可以相互通信。
如果参数设置为,则隔离将在暂停状态下启动,就在调用函数之前,就好像通过初始调用一样。要恢复隔离,请致电。
如果,和/或设置参数,该分离将充当如果分别setErrorsFatal,addOnExitListener和addErrorListener被称为具有相应参数和所述分离开始运行之前进行了处理。
如果省略,平台可以选择默认行为或继承当前隔离的行为。
您也可以拨打setErrorsFatal,addOnExitListener和addErrorListener上返回的分离方法,但除非分离开始的,它可能已经终止前的那些方法可以完成。
如果生成成功,则返回将使用Isolate实例完成的future 。否则将以错误完成。
举个例子:
定时器生成数据,循环20,1~10的随机数
后续如果项目中有具体案例在具体描述!
感谢支持!
领取专属 10元无门槛券
私享最新 技术干货