浏览器工作原理与Javascript高级(前后端异步)

 总体介绍

浏览器运行是多进程的,包括主进程、渲染进行、网络进程和GPU进程等等

解析HTML时(渲染进程)用到两大引擎,一个是渲染引擎(用于渲染页面)、一个是JS引擎用于解析JS代码。又JS引擎运行是单线程的,所以渲染和 js引擎是互斥的。这就要求提高JS引擎解析时间,防止长时间堵塞主线程,以提高渲染效率。异步就可用来解决此问题。

渲染引擎的线程运行

浏览器运行渲染进程先利用渲染引擎渲染页面,渲染过程如下:

 JS引擎的线程运行

主线程中的任务先进入任务队列中给JS引擎解析,其他线程的任务(优先级如下图)的以回调任务进行队列待JS引擎解析。若JS代码改变了DOM树,渲染任务又进入任务队列中待渲染引擎执行。

 主线程就监控检查任务队列中是否任务待执行,有就在主线程中执行,部分任务给其他线程运行(异步任务)【这些任务根据逻辑(如定时3s)将回调函数传到任务队列中,待主线程执行】

Java异步 

 

需求与实现:要实现一个可以被多次触发但在前一次任务完成后才触发下一个任务的异步方法,你可以使用队列来存储待执行的任务,并确保只有在前一个任务完成后才执行下一个任务。

异步任务(定义任务):

public class AsyncTask implements Runnable{private final Map<String,Object> requestData;private final CallPy callPy;public AsyncTask(CallPy callPy, Map<String,Object> requestData) {this.requestData = requestData;this.callPy=callPy;}@Overridepublic void run() {// 从requestData中获取数据Methods methods= (Methods) requestData.get("methods");System.out.println("methods:"+methods);Parameters parameters = (Parameters) requestData.get("parameters");// 长时间运行的处理逻辑// 这里可以是调用后端模型的处理过程callPy.execute(methods,parameters);// 处理完成后,将结果存储在某个地方,如数据库或缓存中}
}

异步+队列(实现调用):

public class AsyncQueue {private final Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<>();private final Executor executor = Executors.newSingleThreadExecutor();private boolean isRunning = false;public synchronized void executeAsyncTask(Runnable task) {// 将任务加入队列taskQueue.add(() -> {try {task.run();} finally {// 任务完成后检查队列并执行下一个任务executeNextTask();}});// 如果当前没有任务在执行,则执行队列中的第一个任务if (!isRunning) {executeNextTask();}}private synchronized void executeNextTask() {// 检查队列是否为空Runnable nextTask = taskQueue.poll();if (nextTask != null) {// 标记当前有任务正在执行isRunning = true;// 使用线程池执行任务CompletableFuture.runAsync(nextTask, executor).thenRunAsync(this::executeNextTask, executor).exceptionally(ex -> {ex.printStackTrace();return null;});} else {// 标记当前没有任务在执行isRunning = false;}}
}

 调用处理方法

    // 异步处理请求的方法private void asyncProcess(AsyncQueue asyncQueue,Map<String,Object> Data) {// 这里使用异步任务来处理请求
//        AsyncQueue asyncQueue=new AsyncQueue();//变了AsyncTask asyncTask = new AsyncTask(callpy,Data);asyncQueue.executeAsyncTask(asyncTask);
//        new Thread(asyncTask).start();}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525282.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

Roguelike游戏经久不衰,到底有什么魔力?

Roguelike作为诸多游戏类型之一&#xff0c;多年来一直蓬勃发展&#xff0c;深受广大玩家们的喜爱。 近几年游戏市场Roguelike游戏爆款频出&#xff0c;从经典的《以撒的结合》开始&#xff0c;到《杀戮尖塔》、《哈迪斯》、《元气骑士》&#xff0c;再到现在的爆款《吸血鬼幸存…

生成对抗网络 (GAN)

生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;是由Ian Goodfellow等人在2014年提出的一种深度学习模型。GAN由两部分组成&#xff1a;一个生成器&#xff08;Generator&#xff09;和一个判别器&#xff08;Discriminator&#xff09;&…

【ARM Coresight | AMBA BUS | Cache | CoreLink | GCC 专栏导读】

请阅读【嵌入式开发学习必备专栏 】 文章目录 1. ARM Coresight SoC-400/SoC-600 专栏导读目录1.1 ARM Coresight 专题1.1.1 Performance Profiling1.1.2 ARM Coresight Debug 工具系列1.1.2.1 ARM DS5 系列1.1.2.2 劳特巴赫 Trace32 系列1.1.2.3 JTAG OpenOCD 系列 1.2 ARM Ca…

这是谁的女儿?其母亲早已红过头了,现在小小年纪的她也爆红网络,没想到吧?

这是谁的女儿&#xff1f;其母亲早已红过头了&#xff0c;现在小小年纪的她也爆红网络&#xff0c;没想到吧&#xff1f; 原来&#xff0c;作母亲的她在红极一时后似乎沉寂了下来&#xff0c;没想到她11岁的女儿近年来也在社交媒体上走红&#xff0c;她为何也成了小网红呢&…

git分布式管理-头歌实验搭建Git服务器

一、Git服务器搭建 任务描述 虽然有提供托管代码服务的公共平台&#xff0c;但是对一部分开发团队来说&#xff0c;为了不泄露项目源代码、节省费用及为项目提供更好的安全保护&#xff0c;往往需要搭建私有Git服务器用做远程仓库。Git服务器为团队的开发者们&#xff0c;提供了…

Microsoft office Word和有道云写的笔记复制粘贴到csdn,图片加载失败的具体解决方法

由于CSDN的博客接口关闭&#xff08;可能是这个原因&#xff09; 此方法失效&#xff0c;之后找了一个新的方法如下&#xff1a; 1.有道云笔记&#xff1a;转为word格式 2.打开火狐浏览器&#xff0c;即可从Microsoft office Word粘贴文章到CSDN。

蓝桥集训之序列

蓝桥集训之序列 核心思想&#xff1a;多路归并 每次将两个序列合并 –> 两序列n2个和中最小的n个 构成新序列 第一行都是加b1 每次在最外面的元素中取最小(优先队列) #include<iostream>#include<algorithm>#include<cstring>#include<queue>#incl…

kamailio转发电话到目的地,目的返回失败时再转给其他IP

按图中这样测试&#xff1a; A---->kamailio------->B B返回480等失败错误码&#xff08;非200 OK&#xff09;&#xff0c;能进入failure_route[TOVOICEMAIL]&#xff0c;但是t_relay_to_udp执行失败。 好吧&#xff0c;说是&#xff1a;在 failure_route 中处理的是…

Pytorch学习 day09(简单神经网络模型的搭建)

简单神经网络模型的搭建 针对CIFAR 10数据集的神经网络模型结构如下图&#xff1a; 由于上图的结构没有给出具体的padding、stride的值&#xff0c;所以我们需要根据以下公式&#xff0c;手动推算&#xff1a; 注意&#xff1a;当stride太大时&#xff0c;padding也会变得很大…

CorelDRAW Standard2024适合业余爱好者和家庭企业的图形设计软件

CorelDRAW Standard 2024是一款功能强大的矢量图形设计软件&#xff0c;专为图形爱好者、家庭用户、微型企业和学生们设计。该软件在Windows平台上运行&#xff0c;并提供了智能对象、布局、插图和模板等功能&#xff0c;帮助用户快速创建高质量的设计作品。 CorelDRAW Standa…

【决策树】预测用户用电量

决策树预测用户用电量 文章目录 决策树预测用户用电量  &#x1f449;引言&#x1f48e;一、 数据预处理数据预处理初步数据分析 二、 机器学习算法决策树回归预测用电量决策树模型介绍&#xff1a;回归预测 三、 可视化结果四、 数据分析与结论代码如下 &#x1f449;引言&a…