dart基础语法
Posted 彬彬杨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dart基础语法相关的知识,希望对你有一定的参考价值。
一. Dart的异步模型
我们先来搞清楚Dart是如何搞定异步操作的
1.1. Dart是单线程的
1.1.1. 程序中的耗时操作
开发中的耗时操作:
-
在开发中,我们经常会遇到一些耗时的操作需要完成,比如网络请求、文件读取等等;
-
如果我们的主线程一直在等待这些耗时的操作完成,那么就会进行阻塞,无法响应其它事件,比如用户的点击;
-
显然,我们不能这么干!!
如何处理耗时的操作呢?
-
针对如何处理耗时的操作,不同的语言有不同的处理方式。
-
处理方式一: 多线程,比如Java、C++,我们普遍的做法是开启一个新的线程(Thread),在新的线程中完成这些异步的操作,再通过线程间通信的方式,将拿到的数据传递给主线程。
-
处理方式二: 单线程+事件循环,比如javascript、Dart都是基于单线程加事件循环来完成耗时操作的处理。不过单线程如何能进行耗时的操作呢?!
1.1.2. 单线程的异步操作
阻塞式调用和非阻塞式调用
如果想搞懂这个点,我们需要知道操作系统中的阻塞式调用
和非阻塞式调用
的概念。
-
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。
-
阻塞式调用: 调用结果返回之前,当前线程会被挂起,调用线程只有在得到调用结果之后才会继续执行。
-
非阻塞式调用: 调用执行之后,当前线程不会停止执行,只需要过一段时间来检查一下有没有结果返回即可。
我们用一个生活中的例子来模拟:
-
你中午饿了,需要点一份外卖,点
外卖的动作
就是我们的调用,拿到最后点的外卖
就是我们要等待的结果。 -
阻塞式调用: 点了外卖,不再做任何事情,就是在傻傻的等待,你的线程停止了任何其他的工作。
-
非阻塞式调用: 点了外卖,继续做其他事情:继续工作、打把游戏,你的线程没有继续执行其他事情,只需要偶尔去看一下有没有人敲门,外卖有没有送到即可。
而我们开发中的很多耗时操作,都可以基于这样的 非阻塞式调用
:
-
比如网络请求本身使用了Socket通信,而Socket本身提供了select模型,可以进行
非阻塞方式的工作
; -
比如文件读写的IO操作,我们可以使用操作系统提供的
基于事件的回调机制
;
这些操作都不会阻塞我们单线程的继续执行,我们的线程在等待的过程中可以继续去做别的事情:喝杯咖啡、打把游戏,等真正有了响应,再去进行对应的处理即可。
二. Dart的异步操作
Dart中的异步操作主要使用Future以及async、await。
以上是关于dart基础语法的主要内容,如果未能解决你的问题,请参考以下文章