首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

现代浏览器探秘(part4):事件处理

2:将鼠标悬停在页面图层 了解非快速可滚动区域 由于JavaScript是运行在主线程,所以当合成页面时,合成器线程会标记页面的一个区域,该区域将事件处理程序附加为“非快速可滚动区域”。...通过获取此信息,合成器线程可以确保在该区域中发生事件时将输入事件发送到主线程。 如果输入事件来自该区域之外,则合成器线程在不等待线程情况下进行合成新帧。 ?...图3:输入到非快速可滚动区域示意图 在编写事件处理程序时要注意 Web开发中常见事件处理模式是事件委托。 由于事件冒泡,你可以在最顶层元素附加一个事件处理程序,根据事件目标委派任务。...即使你应用不关心页面中某些部分输入,合成器线程也必须与主线程通信,并且在每次输入事件进入时都要等待它。因此合成器平滑滚动能力被破坏了。 ?...启用功能策略可确保应用某些行为防止你出错。 例如,如果要确保应用永远不会阻止解析,或者可以在同步脚本策略运行应用。

1.3K20

浏览器之性能指标-TBT

(关于主线程和长任务,我们在浏览器之性能指标-TTI有过介绍,这里就不在赘述) 当一个长任务正在处理时,浏览器无法简单地暂停它响应用户操作,比如用户点击事件,而这些操作发生在长任务进行期间。...❞ 例如,如果主线程任务运行时间为60毫秒,则「长任务阻塞时间」将等于10毫秒。 ❝TBT是「所有长任务线程阻塞时间总和。...进入Performance部分点击重新加载按钮,等待工具分析我们页面。 3. 仔细查看生成报告中Main(主线程)部分。...那些「右上角标价有红色小三角灰色任务」就是长任务 将鼠标悬停在这些任务,可以查看特定任务阻塞主线程时间。所有这些长任务时间总和将计算出我们TBT得分。 5....减少主线程工作 减少主线程工作时,应缩短其在解析、编译和执行CSS和JavaScript文件所花费时间。

75721
您找到你想要的搜索结果了吗?
是的
没有找到

【Java面试总结】多线程

如下图所示,在 windows 中通过查看任务管理器方式,我们就可以清楚看到 window 当前运行进程(.exe 文件运行) image.png 线程线程比进程相似,但线程是一个比进程更小执行单位...总结:线程是进程划分成更小运行单位。线程和进程最大不同在于基本各进程是独立,而各线程则不一定,因为同一进程中线程极有可能会相互影响。...如何避免线程死锁?...new 一个 Thread ,线程进入了新建状态;调用 start() 方法,会启动一个线程使线程进入就绪状态,当分配到时间片后就可以运行了。...start() 会执行线程 响应准备工作,然后自动执行run()方法内容,这是真正线程工作

87330

5-线程

线程概念 本质就是一个能够容纳多个线程容器,其中线程可以反复利用,省去了频繁创建线程对象操作,无需因为反复创建线程对象而消耗过多资源 工作线程(PoolWorker) 表示线程池中线程,...在没有任务时处于等待状态,可以循环执行任务 任务队列(TaskQueue) 用于存放没有处理任务,提供一种缓冲机制 任务接口(Task) 每个任务必须实现接口,一共工作线程调度任务执行,它主要规定了任务入口...,任务执行完后收尾工作任务执行状态等等 线程池管理器(ThreadPool) 用于创建管理线程。...通俗讲就是任务来后就分配一个线程使用,线程处于占用状态,如果任务执行完毕,线程归还于线程池,并且处于空闲状态 合理利用线程好处 降低资源消耗 减少了创建和销毁线程次数,每个工作线程都可以被重复利用...); //第四次向线程池提交任务,超出线程池固定数量,此时线程池复用之前线程 // pool.shutdown(); 在等待任务执行完毕之后关闭线程

19920

Swift基础 并发性

异步代码可以暂停稍后恢复,尽管一次只执行一个程序。在程序中暂停和恢复代码可以让它继续在更新用户界面等短期操作取得进展,同时继续处理长期运行操作,如通过网络获取数据或解析文件。...Swift中异步函数可以放弃它正在运行线程,这允许另一个异步函数在第一个函数被阻止时在该线程运行。 虽然可以在不使用Swift语言支持情况下编写并发代码,但该代码往往更难阅读。...标记为await代码中可能暂停点表示,当前代码可能会在等待异步函数或方法返回时暂停执行。这也被称为生成线程,因为在幕后,Swift暂停在当前线程执行代码,而是在该线程运行一些其他代码。...以下是您如何思考这两种方法之间差异: 当以下行代码取决于该函数结果时,使用await调用异步函数。这创造了按顺序进行工作。...任务任务任务是可以作为程序一部分异步运行工作单元。所有异步代码都作为某些任务一部分运行一节中描述async``let语法为您创建一个子任务

12000

深入理解并发并行,阻塞非阻塞,同步异步

阻塞调用:比如 socket recv(),调用这个函数线程如果没有数据返回,它会一直阻塞着,也就是 recv() 后面的代码都不会执行了,程序就停在 recv() 这里等待,所以一般把 recv...A 有 X,等待 Y。 B 有 Y,等待 X。 于是A,B发生了循环等待,造成死锁。给用户感觉就是程序卡着不动了。 在写代码时候要特别注意共享资源使用,用信号量控制好,避免造成死锁。...线程执行完就会被销毁,如果不想线程被频繁创建,销毁,怎么办?可以给线程里面写个死循环,或者让线程任务时候执行,没任务时候挂起,就像iOS中 runloop 机制一样。...CPU调度策略 在并发运行中,CPU需要在多个程序之间来回切换,那么如何切换就有一些策略 3.1 先来先服务 - 时间片轮转调度 这个很简单,就是谁先来,就给谁分配时间片运行,缺点是有些紧急任务要很久才能得到运行...3.4 最高响应比优先 用线程等待时间除以服务时间,得到响应比,响应比小优先运行。这样不会造成某些任务一直得不到响应。

1.2K10

【从零学习python 】84.深入理解线程和进程

线程和进程 功能 进程,能够完成多任务,比如在一台电脑能够同时运行多个QQ。 线程,能够完成多任务,比如一个QQ中多个聊天窗口。 定义不同 进程是系统进行资源分配和调度一个独立单位。...线程是进程一个实体,是CPU调度和分派基本单位,它是比进程更小能独立运行基本单位。...线程自己基本不拥有系统资源,只拥有一点在运行中必不可少资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程其他线程共享进程所拥有的全部资源。...进程在执行过程中拥有独立内存单元,而多个线程共享内存,从而极大地提高了程序运行效率。 线程不能够独立执行,必须依存在进程中。...可以将进程理解为工厂中一条流水线,而其中线程就是这个流水线上工人。 优缺点 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程则相反。

13710

浏览器之性能指标-TTI

任务包括 渲染、解析HTML和CSS 运行JavaScript代码 以及其他一些可能无法直接控制工作 其中,编写部署到网络「JavaScript是主要任务来源之一」。...除了Web Workers和类似的API之外,所有这些都在主线程执行。 主线程 在浏览器中,大部分任务都在主线程运行。...由于事件处理程序有机会在较小任务之间运行,它比等待任务完成时运行要更快。 由于长任务出现,它们可能会延迟FCP和TTI。在顶部示例中,用户可能会感觉到延迟;而在底部,交互可能会感觉瞬间完成。...「用户交互元素可用:」 网页按钮、链接、表单等交互元素都已加载并且可以正常响应用户点击、输入或其他操作。...在这个窗口中,浏览器不应处理主线程「超过50毫秒任何任务」,也不应等待「超过两个服务器响应请求」。

1.5K30

嵌入式基础知识-系统调度

系统调度是操作系统重要功能,在嵌入式开发,也要了解系统调度基本原理。对于嵌入式Linux开发,一般使用多线程和多进程开发,对于运行RTOS嵌入式系统,一般使用多任务开发。...这些线程、进程、任务调度,有许多相似之处。...1 进程三种状态 执行态(Run):进程占用CPU资源,对于单核处理器,任一时刻只能有一个进行处于执行态 就绪态(Ready):进程本身具备运行条件,但由于处理机个数少于可运行进行从个数,运行...进程切换 进程切换是指,操作系统为了控制进程执行,必须有能力挂起正在CPU运行进程,恢复以前挂起某个进程执行,也称为任务切换,或上下文切换。...AUTOSAR中定义任务有两个类别: 基础任务:只有运行、阻塞、就绪三个状态。 扩展任务:在基础任务基础,多了一个等待状态。

15420

WorkManager 基础入门

在这篇博文中,我将介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...这个例子如上图所示 这个例子正是具有以下特点任务: 可延迟,因为你不需要它立即执行,而且实际可能希望等待某些约束被满足(例如等待网络连接)。...保障 你工作将会运行(即使你重启设备或应用程序退出,它也不会忘记运行工作)。 根据用户 API 级别的最佳实践运行(如上一篇文章所述)。...让我们探讨一下 WorkManager 如何确保你工作脱离主线程运行保证执行。...这也是使得 WorkManager 轻松应对对于不需要保障且只需要在后台线程执行任务原因。例如,假设你已经下载了图像,并且希望根据该图像更改 UI 部分颜色。

13810

WorkManager 基础入门

在这篇博文中,我将介绍: 将你后台任务定义为工作 定义特定工作应该如何运行 运行工作 使用链进行存在依赖工作 监视你工作状态 我还将解释 WorkManager 幕后发生事情,以便你可以就如何使用它做出明智决定...这个例子如上图所示 这个例子正是具有以下特点任务: 可延迟,因为你不需要它立即执行,而且实际可能希望等待某些约束被满足(例如等待网络连接)。...保障 你工作将会运行(即使你重启设备或应用程序退出,它也不会忘记运行工作)。 根据用户 API 级别的最佳实践运行(如上一篇文章所述)。...让我们探讨一下 WorkManager 如何确保你工作脱离主线程运行保证执行。...这也是使得 WorkManager 轻松应对对于不需要保障且只需要在后台线程执行任务原因。例如,假设你已经下载了图像,并且希望根据该图像更改 UI 部分颜色。

92260

android学习笔记----ANR

而是创建一个工作线程,并在那里完成大部分工作。这使得UI线程(驱动用户界面事件循环)保持运行阻止系统断定您代码已冻结。因为这种线程通常是在类级别完成,所以你可以将响应性视为一种类问题。...如何避免ANR Android应用程序通常完全在单个线程运行,默认为“UI线程”或“主线程”。...这意味着您应用程序在UI线程中执行任何操作都需要很长时间才能完成,因为您应用程序没有给自己处理输入事件或意图广播机会。 因此,在UI线程运行任何方法都应该在该线程尽可能少地工作。...主线程不应在等待工作线程完成时阻塞,而应提供Handler供其他线程在完成时回发。以这种方式设计应用程序将允许应用程序UI线程保持对输入响应,从而避免由5秒输入事件超时引起ANR对话框。...因此,除了应该采取措施之外,还有一些其他提示可以避免ANR,使您应用程序看起来对用户响应: 如果您应用程序在后台运行以响应用户输入,请显示正在进行操作(例如使用 ProgressBar 在你用户界面

51600

多进程 python_python课程

并发:指的是任务数多余cpu核数,通过操作系统各种任务调度算法,实现用多个任务“一起”执行(实际总有一些任务不在执行,因为切换任务速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu...> {'m': 20} >>> 子进程运行中,name= test,age=18 ,pid=3593... >>> {'m': 20} 进程和线程区别 进程是资源调度基本单位,而线程是程序执行基本单位...不同进程地址空间是独立,而同一进程中线程之间共享 进程之间通信必须使用操作系统提供进程间通信机制,同一进程中线程可以直接通信 多进程之间可以并发执行,多线程之间也可以并发执行 线程切换开销要比进程切换开销小...运行结果 >>> 等待所有子进程完成... >>> 运行任务 0 (3722)... >>> 运行任务 1 (3723)... >>> 运行任务 2 (3724)... >>> 运行任务 3 (3725...请注意输出结果,task 0,1,2,3是立刻执行,而task 4要等待前面某个task完成后才执行,这是因为Pool默认大小在我电脑是4,因此,最多同时执行4个进程。

30510

深入理解并发并行,阻塞非阻塞,同步异步

阻塞调用:比如 socket recv(),调用这个函数线程如果没有数据返回,它会一直阻塞着,也就是 recv() 后面的代码都不会执行了,程序就停在 recv() 这里等待,所以一般把 recv...于是A,B发生了循环等待,造成死锁。给用户感觉就是程序卡着不动了。 在写代码时候要特别注意共享资源使用,用信号量控制好,避免造成死锁。...可以给线程里面写个死循环,或者让线程任务时候执行,没任务时候挂起,就像iOS中 runloop 机制一样。线程就不会随便终止了。...CPU调度策略 在并发运行中,CPU需要在多个程序之间来回切换,那么如何切换就有一些策略。...3.4 最高响应比优先 用线程等待时间除以服务时间,得到响应比,响应比小优先运行。这样不会造成某些任务一直得不到响应。

1.2K40

idea高级调试技巧

,drop frame即扔掉当前运行栈帧,这样当前“指针”位置,就自然到了一帧位置。...三、多线程调试 多线程同时运行时,谁先执行,谁后执行,完全是看CPU心情,无法控制先后,运行时可能没什么问题,但是调试时就比较麻烦了,最明显就是断点乱跳,一会儿停这个线程,一会儿停在另一个线程,比如下图...: 如果想希望下一个断点位置是第2句诗句,可能要失望了: 如果想让线程在调试时,想按自己愿意来,让它停在哪个线程停在哪个线程,可以在图中3个断点小红点右击, 即:Suspend挂起条件是按每个线程来...,我们可以选择线程“天空中飞鸟” 断点如愿停在了第2句诗。...五、临时执行表达式/修改变量运行值 调试时,可以临时执行一些表达式,参考下图:点击这二个图标中任何1个都可以 点击+号后,就可以在新出现输入框里输入表达式,比如i+5 然后回车,马上就能看到结果

62930

python进阶(8)多进程

并发:指的是任务数多余cpu核数,通过操作系统各种任务调度算法,实现用多个任务“一起”执行(实际总有一些任务不在执行,因为切换任务速度相当快,看上去一起执行而已) 并行:指的是任务数小于等于cpu...> {'m': 20} >>> 子进程运行中,name= test,age=18 ,pid=3593... >>> {'m': 20} 进程和线程区别 进程是资源调度基本单位,而线程是程序执行基本单位...不同进程地址空间是独立,而同一进程中线程之间共享 进程之间通信必须使用操作系统提供进程间通信机制,同一进程中线程可以直接通信 多进程之间可以并发执行,多线程之间也可以并发执行 线程切换开销要比进程切换开销小...运行结果 >>> 等待所有子进程完成... >>> 运行任务 0 (3722)... >>> 运行任务 1 (3723)... >>> 运行任务 2 (3724)... >>> 运行任务 3 (3725...请注意输出结果,task 0,1,2,3是立刻执行,而task 4要等待前面某个task完成后才执行,这是因为Pool默认大小在我电脑是4,因此,最多同时执行4个进程。

38520

Java编程思想第五版(On Java8)(二十四)-并发编程

当编写这些类型程序时,你永远不会被底层系统和工具屏蔽,甚至关于CPU缓存如何工作细节。最后,如果你非常小心,你创作东西在特定情况下起作用,但它在其他情况下不起作用。...如果你在多个处理器运行多个任务,并且每个处理器都以满容量运行,并且任何其他任务都没有等待,那么尝试提高吞吐量是没有意义。并发唯一形式是如果程序某些部分被迫等待。...然而,有些情况下,并发模型会产生更简单代码,实际值得让它运行得更慢以实现。 在克隆体敲门等待情况下,即使单处理器系统也能从并发中受益,因为它可以从等待(阻塞)任务切换到准备好任务。...单处理器系统中性能改进一个常见例子是事件驱动编程,特别是用户界面编程。考虑一个程序执行一些长时间运行操作,从而最终忽略用户输入和无响应。如果你有一个“退出”按钮,你不想在你编写每段代码中轮询它。...这会产生笨拙代码,无法保证程序员不会忘记执行检查。 没有并发性,生成响应式用户界面的唯一方法是让所有任务定期检查用户输入。通过创建单独执行线程来响应用户输入,该程序保证了一定程度响应。

33210

如何分析ANR问题

一篇介绍了ANR问题相关知识,本篇介绍如何分析ANR问题。下面链接是我之前分析一个ANR问题实例,实战与理论结合更容易理解。...2、 ANR类别:可以据此判断ANR超时时间,决定需要回溯多久查找ANR原因。比如用户输入时间处理超时回溯5秒,广播超时回溯10秒。...主线程看上去和阻塞很相似,但通常会停在一个被频繁调用原生公共模块,通常是窗口绘制或布局相关方法。 低性能问题通常比较难以判断,应当主要关注以下几个特征。...“恰好”停在一个被频繁调用调用公共模块,有点像玩击鼓传花,停在哪行代码并不意味这行代码阻塞了整个程序运行。...分析这类问题时就不能简单地看应用程序主线程堆栈停在哪里,而是要分析窗口生命周期各个方法执行时间,找到运行迟缓部分。Event.log中需要关注信息主要有: ?

1.9K30

Python系统编程-进程1.进程1.多任务引入2.多任务概念

·此时显然刚刚程序并没有完成唱歌和跳舞同时进行要求 ·如果想要实现“唱歌跳舞”同时进行,那么就需要一个新方法,叫做:多任务 2.多任务概念 多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务...multiprocessing模块就是跨平台版本多进程模块。 multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程等待其结束: ?...运行结果: ? 说明:当一个函数参数存在于一个元组或者一个字典中时,用来间接调用这个函数,并肩元组或者字典中参数按照顺序传递给参数。这里我理解是当成单线程在执行。...timeout(单位秒),消息列队如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息列队腾出空间为止,如果设置了timeout,则会等待timeout秒,若还没空间,则抛出"Queue.Full...下面的实例演示了进程池中进程如何通信: ? 运行结果: ?

58830

死磕 java线程系列之自己动手写一个线程池(续)

(手机横屏看源码更方便) ---- 问题 (1)自己动手写线程如何支持带返回值任务呢? (2)如果任务执行过程中抛出异常了该怎么处理呢?...简介 一章我们自己动手写了一个线程池,但是它是不支持带返回值任务,那么,我们自己能否实现呢?必须可以,今天我们就一起来实现带返回值任务线程池。...前情回顾 首先,让我们先回顾一下一章写线程池: (1)它包含四个要素:核心线程数、最大线程数、任务队列、拒绝策略; (2)它具有执行无返回值任务能力; (3)它无法处理有返回值任务; (4)它无法处理任务执行异常...有返回值任务就不一样了,主线程首先要提交任务线程池中,它需要使用到任务执行结果,所以它必须等待任务执行完毕才能拿到任务执行结果。 那么,为什么不直接在execute时候就等待任务执行完毕呢?...= new AtomicReference(); 然后,我们先来看看run()方法逻辑,它其实就是先执行真正任务,然后修改状态为完成,保存任务返回值,如果保存了主线程,还要唤醒它。

34510
领券