颤振稳定性叶瓣图_颤振性能优化

2024-03-03 09:59

本文主要是介绍颤振稳定性叶瓣图_颤振性能优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

颤振稳定性叶瓣图

Ever wondered how flutter handles all your UI building and events like Futures, taps, etc.. on a single thread( yes it does all that on a single thread 😮😮😮 until and unless explicitly done).

曾经想知道flutter如何在单个线程上处理所有UI构建和事件,例如Future,taps等。(是的,它在单个线程上完成所有操作😮😮😮直到并且除非明确完成)。

什么是线程/隔离? (What is Thread/Isolates ?)

Thread is an independent process that has its own chunk of memory and executes the given instructions on that memory , It can work parallelly with other threads hence can reduce execution time of multiple process on a single thread .

线程是一个独立的进程,具有自己的内存块并在该内存上执行给定的指令。它可以与其他线程并行工作,因此可以减少单个线程上多个进程的执行时间。

Let’s understand this with an example :

让我们通过一个例子来理解这一点:

In Fps games like counter strike, Call of duty, etc. you can see that as soon as you fire a weapon few tasks executes simultaneously like playing of bullet sound, change of bullet count and reduction in opponent health , All these things happens parallelly these are basically threads which execute parallelly and execute their task on separate isolates(isolates and threads can be used interchangeably as isolate is a Dart way of multi threading more on that below) which have its own memory.

在Fps游戏中,例如反恐精英,使命召唤等,您可以看到,一旦发射武器,几乎没有同时执行的任务,例如弹奏子弹声,改变子弹数和减少对手的生命值,所有这些并行发生基本上是并行执行并在单独的隔离上执行其任务的线程(隔离和线程可以互换使用,因为隔离是Dart在下面的更多内容中介绍的多线程方法),它具有自己的内存。

演示地址

Languages like JAVA and C++ Share Their heap memory with threads, but in case of flutter, every isolate has its own memory and works independently. As it has its own private space this memory doesn’t require locking, as if a thread finishes its task it already means that the thread has finished utilizing its memory space and then that memory can go for garbage collection.

诸如JAVA和C ++之类的语言与线程共享它们的堆内存,但是在出现混乱的情况下,每个隔离都有自己的内存并且可以独立工作。 由于该内存具有自己的私有空间,因此不需要锁定,就好像一个线程完成了它的任务一样,这意味着该线程已经完成了对它的内存空间的利用,然后该内存可以用于垃圾回收了。

To maintain these benefits flutter has a separate memory for every isolate(Flutter way of multi-threading) that’s why they are called isolate 🙂.

为了保持这些好处,flutter为每个隔离(Flutter的多线程方式)都有一个单独的内存,这就是为什么它们被称为isolate🙂。

Learn more about isolates below.

在下面了解有关隔离株的更多信息。

演示地址

它对我有什么帮助?在哪里应该使用隔离/线程? (How can it be helpful to me and where should I use isolates/Threads?)

何时使用隔离/线程? (When to use isolates/threads ?)

There are a few situations where isolates can be very handy.

在某些情况下,隔离很方便。

  1. Let say you want to execute a network call and you want to process that data that you just received . and that data contains about million records that alone will hang your UI.

    假设您要执行网络呼叫,并且要处理刚收到的数据。 并且这些数据包含大约一百万条记录,仅此一项就会挂起您的UI。
  2. You have some image processing tasks that you want to do on-device these kinds of tasks are highly computational as they have to deal with lots of number crunching operations which may lead to frozen UI or legginess in UI.

    您有一些要在设备上执行的图像处理任务,这些类型的任务需要大量的计算,因为它们必须处理大量的数字运算操作,这可能会导致UI冻结或UI出现问题。

So to conclude when to use isolates, We should use them whenever you think there is a lot of computation that needs to be offloaded from the main thread.

因此,总结一下何时使用隔离符,只要您认为需要从主线程中卸载大量计算,就应该使用它们。

如何使用隔离株? (How to use isolates ?)

Flutter team has designed a very elegant and abstract way of using isolates/threads in a flutter, Using compute we can do the same task which isolates does but in a more cleaner and abstract way. Let’s take a look at the flutter compute function.

Flutter团队设计了一种在flutter中使用隔离/线程的非常优雅和抽象的方法。使用计算,我们可以执行与isolates相同的任务,但使用的方法更加简洁和抽象。 让我们看一下Flutter 计算功能。

Syntax:

句法:

var getData = await compute(function,parameter);

Compute function takes two parameters :

计算功能采用两个参数:

  1. A future or a function but that must be static (as in dart threads does not share memory so they are class level members not object level).

    未来或功能,但必须是静态的(如dart线程不共享内存,因此它们是类级别的成员,而不是对象级别的成员)。
  2. Argument to pass into the function, To send multiple arguments you can pass it as a map(as it only supports single argument).

    要传递给函数的参数,要发送多个参数,可以将其作为映射传递(因为它仅支持单个参数)。

compute function returns a Future which if you want can store into a variable and can provide it into a future builder.

计算函数返回一个Future,如果需要,可以将其存储到变量中并将其提供给future构建器。

Let’s start by analyzing a sample problem:

让我们开始分析一个样本问题:

import 'dart:io';import 'package:flutter/material.dart';class With10SecondDelay extends StatelessWidget {runningFunction() {int sum = 0;for (int i = 1; i <= 10; i++) {sleep(Duration(seconds: 1));print(i);sum += i;}return "total sum is $sum";}pauseFunction() {//pause function is not asyncprint(runningFunction());}@overrideWidget build(BuildContext context) {pauseFunction();return Material(child: Center(child: Center(child: Text("Tnx for waiting 10 seconds : check console for response",style: TextStyle(fontSize: 50,),),),),);}
}

In the above code pausefunction() is called just below the build method which pauses the execution of code for 10 seconds. And because of that when you try to navigate to this page from a previous one there will be a delay of ten seconds before our page gets pushed on to the widget tree.

在上面的代码中,在build方法正下方调用了pausefunction(),该方法将代码的执行暂停10秒钟。 因此,当您尝试从上一个页面导航到该页面时,将有十秒钟的延迟,然后我们的页面被推到小部件树上。

We can try to resolve this issue by using async.

我们可以尝试使用异步解决此问题。

pauseFunction() async {//pause function is asyncprint(runningFunction());}

As you can see now we have declared our pause function as async even doing this will not help

如您现在所见,我们已经将暂停功能声明为异步,即使这样做也无济于事

As async in dart is basically puts our code in ideal until there is something to compute so it seems to us that dart is executing these on a different thread but actually it’s just waiting for some event to occur in that async function.

由于dart中的async基本上使我们的代码处于理想状态,直到可以进行计算为止,因此在我们看来dart在不同的线程上执行这些操作,但实际上它只是在等待该async函数中发生的事件。

More on async below :

以下是有关异步的更多信息:

演示地址

Let’s solve the above issue using compute.

让我们使用compute解决上述问题。

import 'dart:io';import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';class ComputeWith10SecondDelay extends StatelessWidget {static Future<String> runningFunction(String str) async {int sum = 0;for (int i = 1; i <= 10; i++) {await Future.delayed(Duration(seconds: 1));print(i);sum += i;}return "Sum is : " + sum.toString() + str;}pauseFunction() async {print(await compute(runningFunction," This is an argument")); //storing data of copute result}@overrideWidget build(BuildContext context) {pauseFunction();return Material(child: Center(child: Center(child: Text("Wow , it saved my 10 seconds : check console for response",style: TextStyle(fontSize: 50,),),),),);}
}

In the above code, we basically passed our function in compute() function and that creates a separate isolate to handle the task and our main UI will still run without any delay (check the debug console for response ).

在上面的代码中,我们基本上将函数传递给了compute()函数,并创建了一个单独的隔离来处理任务,我们的主UI仍将无任何延迟地运行(请检查调试控制台以获取响应)。

Summary:

摘要:

  1. Dart is by default executes all its code on a single-threaded.

    默认情况下,Dart是在单线程上执行其所有代码。
  2. Every function and every async-await calls work only on the main thread(until and unless specified).

    每个函数和每个async-await调用仅在主线程上起作用(直到指定,除非指定)。
  3. We can create multiple threads using compute( Future function/normal function, argument).

    我们可以使用compute(Future function / normal function,arguments)创建多个线程。
  4. You can use compute for executing network calls, performing number-crunching calculations, image processing, etc.

    您可以使用计算来执行网络呼叫,执行数字运算,图像处理等。

This is all about compute to learn more about isolates (the underlying architecture of computing function) check out isolate .

这就是关于计算的全部内容,以了解有关隔离的更多信息(计算功能的基础体系结构)签出隔离 。

Thanks for reading this article.

感谢您阅读本文。

If you find it interesting Please Clap! and if you found anything wrong please let me know I would appreciate it for your contribution.

如果您觉得有趣,请拍手! 如果您发现任何错误,请告诉我,感谢您的贡献。

Check out full code at FlutterDevs GitHub.

在以下位置查看完整代码 FlutterDevs GitHub。

FlutterDevs team of Flutter developers to build high-quality and functionally-rich apps. Hire flutter developer for your cross-platform Flutter mobile app project on an hourly or full-time basis as per your requirement! You can connect with us on Facebook, GitHub, Twitter, and LinkedIn for any flutter related queries.

FlutterDevs的Flutter开发人员团队可构建高质量且功能丰富的应用程序。 根据您的要求,每小时或全时为您的跨平台Flutter移动应用程序项目雇用flutter开发人员 ! 您可以在Facebook , GitHub , Twitter和LinkedIn 上与我们联系,以获取任何与抖动相关的查询。

We welcome feedback and hope that you share what you’re working on using #FlutterDevs. We truly enjoy seeing how you use Flutter to build beautiful, interactive web experiences!.

我们欢迎您提供反馈,并希望您分享使用#FlutterDevs所做的工作 。 我们非常高兴看到您如何使用Flutter建立美好的交互式Web体验!

Image for post

翻译自: https://medium.com/flutterdevs/flutter-performance-optimization-17c99bb31553

颤振稳定性叶瓣图


http://www.taodudu.cc/news/show-8479333.html

相关文章:

  • 双路颤振频率Hz可设置比例阀放大器
  • 深度聚类paper汇总
  • paperwithcode
  • AAAI2021 accepted paper list
  • 使用Tex 撰写paper-TexStudio设置默认字体样式大小等
  • Raphael学习之Paper常用API(四)
  • 如何写paper
  • Paper:txyz_ai(一款帮助科研人员阅读PDF论文ChatGPT利器)的简介、安装、使用方法之详细攻略
  • 抑郁症康复日记
  • 计算机抑郁症与干涉相关的,抑郁症
  • matlab 自带的数据集fisheriris
  • 【文末福利】为什么我们要掌握Linux系统编程?
  • 什么是TCP的混合型自时钟
  • 炮打洋鬼子创作总结
  • oracle 过滤字段中的中文,不再洋不洋土不土
  • field list什么意思_闲话Python之range()到底是个什么玩意儿
  • AI全栈大模型工程师(二十二)什么是模型训练
  • 什么是mysql锁_简单理解MySQL锁
  • 什么是MAS : 一种目标管理工具和方法
  • 什么是接口API
  • python函数一般不能_Python程序中对一个函数的调用不能出现在该函数的定义之前...
  • 打字练习软件 Type Fu mac中文版技能介绍
  • 打字练习(Python代码模拟打字练习软件效果)
  • 增长率超60%,工业机器人进入新一轮爆发期!
  • 数据结构与算法-动态规划-机器人达到指定位置方法数
  • 机器人学习之项目- Project5:KUKA Robot Challenge(一)
  • 机器人学习-路径规划实验(一)
  • 机器人编程(Robot Programming)学习笔记一
  • 非夕机器人配合笔记
  • Flexiv发布首个自适应机械臂,带来第三代机器人技术
  • 这篇关于颤振稳定性叶瓣图_颤振性能优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/769273

    相关文章

    Oracle查询优化之高效实现仅查询前10条记录的方法与实践

    《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

    C#使用HttpClient进行Post请求出现超时问题的解决及优化

    《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

    Java内存泄漏问题的排查、优化与最佳实践

    《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

    C#使用yield关键字实现提升迭代性能与效率

    《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

    MySQL不使用子查询的原因及优化案例

    《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

    MySQL中my.ini文件的基础配置和优化配置方式

    《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

    Java实现任务管理器性能网络监控数据的方法详解

    《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

    正则表达式高级应用与性能优化记录

    《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

    Vue3 的 shallowRef 和 shallowReactive:优化性能

    大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

    性能测试介绍

    性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题