美文网首页
关于dart单线程的理解

关于dart单线程的理解

作者: 晨曦中的花豹 | 来源:发表于2022-09-07 16:30 被阅读0次
    dart的单线程丝毫没有任何优势可言

    关于dart很不好理解的一个地方就是,它是单线程的,如何来处理耗时操作呢?,网上搜索到的都是在说io,网络请求,而这些操作都是只需要发起而不需要我自己做的,或者必需要一直等待的,比如我定外卖,点完之后我就可以放下手机去干别的事情,到时候送过来,我就可以直接吃了,所以对于这样的问题dart单线程是丝毫没有影响的,它只需要触发这个任务,对应模块处理完成后回调告诉它就可以了,但是如果这件事情必须要自己处理,比如我有一个任务整体耗时需要1s,即使我将它放到异步去处理,他还是会占用当前的线程1s,而这1s线程是不能处理别的任务的,导致的结果就是,页面会卡死,比如这段代码,loading图标会卡死

    @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.white,
          // appBar: AppBar(
          //   title: Text("ceshi"),
          // ),
          body: Center(
            child: CircularProgressIndicator(
              valueColor: AlwaysStoppedAnimation<Color>(Colors.black),
              strokeWidth: 2,
            ),
          ),
          floatingActionButton: FloatingActionButton(
            child: Text("按钮"),
            onPressed: () async {
              sleep(Duration(seconds: 1));
            },
          ),
        );
      }
    

    所以dart的单线程适用范围是比较窄的,不能像原生一样开启子线程那样灵活自如

    iOS多线程与dart单线程对比:

    在iOS中有一个主线程(UI线程),需要执行耗时操作通常会开启子线程去处理,而dart中没有子线程,只有特定的几个场景有对应的模块执行而已,所以原生相当于可以随时创建出手臂,用来处理任何耗时操作,而dart只有出厂安装好的几个手臂,如果想干别的耗时操作,只能是通过Isolate来完成,而Isolate并不如子线程那样舒适.

    所以这样理解后会发现他就相当于原生的UI线程,也只能是线性的执行任务,网上说的dart单线程多么厉害,看看就好了

    关于Isolate他还不能简单的认为是dart中的多线程,首先通过测试,创建一个Isolate耗时很严重,跟原生(比如GCD)的性能差距很大,其次数据不共享,要通过通信方式传递参数,非常不方便,最后是代码量,写一个简单的Isolate通信需要写很多代码,而GCD就显得从容了很多

    DispatchQueue.global().async {
            //异步执行任务
            DispatchQueue.main.async {
                //回调主线程
            }
    
          }
    

    所以对于dart单线程我没有感觉到任何的优点,反而是复杂操作,远不如原生灵活

    我觉得如果dart引入子线程会更加的好用

    相关文章

      网友评论

          本文标题:关于dart单线程的理解

          本文链接:https://www.haomeiwen.com/subject/pcdonrtx.html