好吧,我自己找到答案了.
Dart中的Isaolate就是使用特定操作系统中的Thread实现的,DartVM对其进行了封装. 所以不存在单线程多进程.
相关源码 github.c0m/dart-lang/sdk/blob/master/runtime/vm/os_thread.h
// Declare the OS-specific types ahead of defining the generic classes.
#if defined(HOST_OS_ANDROID) #include "vm/os_thread_android.h"
#elif defined(HOST_OS_FUCHSIA) #include "vm/os_thread_fuchsia.h"
#elif defined(HOST_OS_LINUX) #include "vm/os_thread_linux.h"
#elif defined(HOST_OS_MACOS) #include "vm/os_thread_macos.h"
#elif defined(HOST_OS_WINDOWS) #include "vm/os_thread_win.h"
原问题:
Dart的官网告诉我们:Dart的程序运行在单线程中的。
然后在这篇文章中提到了这一点:Dart应用会在一个新的线程进程启动。
操作系统内核对CPU调度只提供了进程的抽象,虽然操作系统提供了一些实现了线程模型的库。
isolate的特性之一也是不共享内存, 是不是说明 Dart是通过单线程多进程实现异步非阻塞的呢?
每创建一个isolate就会fork一个进程?
还有个小问题,我在尝试了解future实现的时候走到这就不知道怎么继续了。
new Future((){})
Timer.run()
Zone.current.createTimer(duration, Zone.current.bindCallbackGuarded(callback))
最后通过IDEA定位到这个方法
external static Timer _createTimer(Duration duration, void callback());
这种 external static 的方法如何找到方法实现呢?
为啥Timer和Zone并没有实现关系,为啥Timer中调用了Zone的createTimer,而最终实现却是Timer的这个external static Timer _createTimer() 方法。