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

计算机的运行原理

前言: 软件的核心载体是程序代码,软件开发的主要工作产出也是代码,但是代码被存储磁盘上本身没有价值,软件要想实现价值,代码就必须运行起来。那么代码是如何运行的?在运行中可能会出现什么样的问题?...操作系统把执行代码加载到内存中,生成相应的数据结构和内存空间,就可以从可以执行代码的起始位置读取指令交给CPU顺序执行,指令执行的过程中,可能会遇到一条跳转指令,即CPU要执行的下一条指令不是内存中可以执行代码顺序的下一条指令...为什么一台计算机服务器可以同时处理数以百计的计算任务呢。这里主要依靠是操作系统的CPU分时共享技术。如果同时有多个进程执行,操作系统会将CPU的执行时间分成很多份,进程按照某种策略轮流CPU上运行。...系统为什么会变慢,为什么会崩溃 现在的服务器软件系统主要使用多线程技术实现多任务的处理,完成对很多用户的并发请求处理。...如果当前线程执行到第一行,获得锁的代码的时候,锁已经被其他线程获取并没有释放,那么这个线程就会进入阻塞状态,等待前面释放锁的线程将自己唤醒重新获得锁 锁会引起线程阻塞,如果有很多线程同时在运行,那么就会出现线程排队等待锁的情况

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

js中的同步与异步

监听DOM,修改页面的操作,渲染我们的样式,都是需要浏览器去处理的 这样的话,所谓的异步请求就很好理解了 指web服务器对请求作出响应时不要求你等待,这说明,浏览器解析js代码,当遇到异步任务时,不会僵持在那里不动...如果你把xhr.open()的第三个参数设置为false,那么当你点击按钮,点击红色的box,它是不会起作用的,只有等待响应的结果执行,点击红色的box,才会生效执行 ?...JS是单线程的,那肯定只能同步(排队)顺序执行代码,是没有疑问的,写同步代码的好处就是好理解,坏处就是容易阻塞,只能等待上一次任务做完了,接着做下一个任务....如果JS中不存在异步,只能自上而下执行,万一上一行解析代码的时间很长,那么下面的代码就会被阻塞。...却总是道不明白. setTimeout里的匿名函数并没有立即执行,而是延迟了一段时间,等满足一定条件,才去执行的,匿名函数没有立即被调用栈执行,而是添加一个队列中,专业点称为任务队列,类似这样的代码,

3.4K10

ajax提交等待服务器响应友好提示信息的实现

众所周知,客户端向服务器发送AJAX请求时,会有一个等待服务器响应的过程,在网络环境好而且服务器负荷小的时候,业务逻辑不大太复杂的请求可能一下子就处理完并返回响应结果了,但当网络环境不理想或请求涉及到大量的运算时...,服务器响应的时间或许就会比较漫长了,特别对于正在操作,正期待操作结果的用户来说,这段等待时候是无比的漫长,如果你没有过这样的操作体验,你回想一下约会时别人迟到的时候或有急事出门时公交站苦苦等车的滋味...,为true时,表示已经发送了AJAX请求,但还没有得到服务器的回应,为false时,表示当前没有正在等待响应的请求。...继续向下的代码中,有个叫quickTips的方法,这个方法用于显示一些快速提示,如quickTips表示id为userName的输入框附近提示用户输入用户名,这里不多介绍了,一些常规的检测完毕,...,那就setInterval吧,下面的代码就不多作解释咯,记着loginCompleteclearInterval就好了。

2.5K30

前端高频面试题(五)(附答案)

因为两个代码写在 IO 回调中,IO 回调是 poll 阶段执行,当回调执行完毕队列为空,发现存在 setImmediate 回调,所以就直接跳转到 check 阶段去执行回调了。...此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL,客户端才进入CLOSED状态。那为什么需要四次挥手呢?因为当服务端收到客户端的SYN连接请求报文,可以直接发送SYN+ACK报文。...(2)204 No Content该状态码表示客户端发送的请求已经服务器端正常处理了,但是没有返回的内容,响应报文中不包含实体的主体部分。...(3)403 Forbidden该状态码表明请求资源的访问被服务器拒绝了,服务器没有必要给出详细理由,但是可以响应报文实体的主体中进行说明。进入该状态,不能再继续进行验证。...(4)504 Gateway Timeout该状态码表示网关或者代理的服务器无法规定的时间内获得想要的响应。他是HTTP 1.1中新加入的。使用场景:代码执行时间超时,或者发生了死循环。5.

66121

你需要了解的有关 Node.js 的所有信息

server 仅在 client 请求时做出响应,并在每次响应关闭连接。 这种模式是有效的,因为对服务器的每一个请求都需要时间和资源(内存、CPU 等)。...多线程服务器示例中,服务器同时最多允许 4 个请求(线程)当接下来收到 3 个请求时,这些请求必须等待直到这 4 个线程中的任何一个可用。...当用户访问 /products 时,需要执行特定的方法或函数来满足请求,因此会有一小段代码来解析这个请求的 url 并定位到正确的方法或函数。线程正在工作。✔️ 2. 该方法或函数以及第一行将被执行。...(某某方法正在执行),这是一个阻塞的 I/O 操作。线程正在等待。❌ 4. 日志已被保存并且下一行将被执行。线程正在工作。✔️ 5....服务器将会继续参加请求。 我们将使用异步代码。 让我们写一个例子,每一次 /home 请求时,服务器响应一个 HTML 页面,否则服务器响应一个 'Hello World' 文本。

91522

浏览器输入 URL 回车,会发生什么?

注意:本文的步骤是建立,请求的是一个简单的 HTTP 请求,没有 HTTPS、HTTP2、最简单的 DNS、没有代理、并且服务器没有任何问题的基础上,尽管这是不切实际的。...IP 地址、身份信息等) 重定向 假如服务器配置了 HTTP 重定向,就会返回一个 301永久重定向响应,浏览器就会根据响应,重新发送 HTTP 请求(重新执行上面的过程)。...五、浏览器接受响应 浏览器接收到来自服务器响应资源,会对资源进行分析。 首先查看 Response header,根据不同状态码做不同的事(比如上面提到的重定向)。...JavaScript 编译执行 大致流程 可以分为三个阶段: 1. 词法分析 JS 脚本加载完毕,会首先进入语法分析阶段,它首先会分析代码块的语法是否正确,不正确则抛出“语法错误”,停止执行。...宏任务 分为: 同步任务:按照顺序执行,只有前一个任务完成,才能执行一个任务 异步任务:不直接执行,只有满足触发条件时,相关的线程将该异步任务推进任务队列中,等待JS引擎主线程上的任务执行完毕时才开始执行

87540

产品经理学技术:浏览器输入URL回车发生了什么

● 如果走的是后台代码的匹配路由,则会执行后台相应的逻辑,如果逻辑里面有查询数据库的请求,则会向数据库服务器发起一条查询数据的请求,等待数据库的数据返回,最后才把数据返回给前端。...● 数据准备好服务器开始构建响应,创建一条http响应报文,把资源信息放到响应体里面开始返回。 05 浏览器接受响应 ● http请求响应,都有一个状态码返回,用来标记这次返回的状态。...网关错误 504:timeout,表示服务器规定时间内没有返回资源 浏览器会根据状态码,做出相应的动作,遇到200会接受正常返回信息,开始渲染页面。...1、HTML解析 浏览器拿到html网页,会利用html解析规则,一行一行地往下解析,然后构建成一棵DOM节点的树。HTML解析完成,浏览器会通知DOM解析完成。...3、javascript解析执行 如果有js代码,则会根据js的语法进行语法解析,按顺序执行js代码

75920

种草Cypress和TestCafe,QA同学一定想了解的Web UI自动化测试工具

果然没有失望,技术雷达中,他们的定位是这样的: ?...XHR and Fetch Requests:执行测试动作之前,等带XHR 和 fetch request,测试收到响应或超时运行下一步。...Redirects:当触发重定向时,自动等待服务器响应。 Cypress更是将使用cy.wait()当作是反模式,明文写在其文档中。...cy.request()收到服务器响应之前不会进行解析,此处添加的“等待5s”已经默认存在了。...它的运行界面中可以看到每一步的操作,只需点击你想重现的步骤即可看到该步的截屏。如下图所示,点击“找到包含type的元素”这一行代码,右侧就会呈现出此时的场景,并高亮出这个元素。 ?

2.8K20

Nginx从入门到学会--5.必会的重要概念

http请求是典型的请求-响应类型的的网络协议,而http是文件协议,所以我们分析请求行与请求头,以及输出响应行与响应头,往往是一行一行的进行处理。...如果我们自己来写一个http服务器,通常在一个连接建立好,客户端会发送请求过来。然后我们读取一行数据,分析出请求行中包含的method、uri、http_version信息。...然后再一行一行处理请求头,并根据请求method与请求头的信息来决定是否有请求体以及请求体的长度,然后再去读取请求体。得到请求,我们处理请求产生需要输出的数据,然后再生成响应行,响应头以及响应体。...如果结果为keepalive,那么,nginx输出完响应,会设置当前连接的keepalive属性,然后等待客户端下一次请求。...为什么要这样呢?我们先来看看这样一个场景。nginx接收客户端的请求时,可能由于客户端或服务端出错了,要立即响应错误信息给客户端,而nginx响应错误信息,大分部情况下是需要关闭当前连接。

41730

Nginx从入门到学会--5.必会的重要概念

http请求是典型的请求-响应类型的的网络协议,而http是文件协议,所以我们分析请求行与请求头,以及输出响应行与响应头,往往是一行一行的进行处理。...如果我们自己来写一个http服务器,通常在一个连接建立好,客户端会发送请求过来。然后我们读取一行数据,分析出请求行中包含的method、uri、http_version信息。...然后再一行一行处理请求头,并根据请求method与请求头的信息来决定是否有请求体以及请求体的长度,然后再去读取请求体。得到请求,我们处理请求产生需要输出的数据,然后再生成响应行,响应头以及响应体。...如果结果为keepalive,那么,nginx输出完响应,会设置当前连接的keepalive属性,然后等待客户端下一次请求。...为什么要这样呢?我们先来看看这样一个场景。nginx接收客户端的请求时,可能由于客户端或服务端出错了,要立即响应错误信息给客户端,而nginx响应错误信息,大分部情况下是需要关闭当前连接。

83021

API 请求慢?这次锅真不在后端

但是后端同学通过一顿操作发现,接口没有问题,他们是通过 postman 工具以及 test 环境尝试,都发现接口请求速度是没有问题的。 “那感觉是前端问题”?...所以 API 一直等待浏览器给它发出去的指令,以上面截图的为例,整整等待了 23.84S,它请求和响应的时间很快(最多也就几百毫秒,也就是后端所说的接口并不慢)。...至于偶现,是因为前端开发者有时候用 Chrome 会打开了多个选项卡,每个选项卡都是同一个本地开发地址,就会导致达到 SSE 的最大连接数的限制,而它的执行时间会很长,也就会阻塞其他的请求,一致等待...使用 HTTP / 2 使用 HTTP / 2 时,HTTP 同一时间内的最大连接数由服务器和客户端之间协商(默认为 100) 这解释了为什么我们 test 环境没有问题,因为 test 环境用的是 HTTP...文档中,我们找到 server[3] 选项,允许设置服务器和配置项(默认为 'http')。 只需要加上这一行代码即可。

79510

Ajax基础

全局刷新是同步行为, 局部刷新是异步行为[浏览器数据没有全部更新] 这个异步对象用于在后台与服务器交换数据。XMLHttpRequest 就是我们说的异步对象。...XMLHttpRequest 对象能够: 不重新加载页面的情况下更新网页 页面已加载后向服务器请求数据 页面已加载服务器接收数据 所有现代浏览器 (IE7+、Firefox、Chrome、Safari...通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象 创建 XMLHttpRequest 对象的语法(xhr): var xmlhttp = new XMLHttpRequest...可以继续向下执行其他命令。 3) 当响应就绪再对响应结果进行处理 实现步骤 : 5....2)浏览器委托异步请求对象工作期间,浏览器处于等待状态。不能执行其他命令。 3)不推荐使用。

11810

Ajax基础

全局刷新是同步行为, 局部刷新是异步行为[浏览器数据没有全部更新] 这个异步对象用于在后台与服务器交换数据。XMLHttpRequest 就是我们说的异步对象。...XMLHttpRequest 对象能够: 不重新加载页面的情况下更新网页 页面已加载后向服务器请求数据 页面已加载服务器接收数据 所有现代浏览器 (IE7+、Firefox、Chrome、Safari...通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象 创建 XMLHttpRequest 对象的语法(xhr): var xmlhttp = new XMLHttpRequest...可以继续向下执行其他命令。 3) 当响应就绪再对响应结果进行处理 实现步骤 : 5....2)浏览器委托异步请求对象工作期间,浏览器处于等待状态。不能执行其他命令。 3)不推荐使用。

11510

API 请求慢?这次锅真不在后端

但是后端同学通过一顿操作发现,接口没有问题,他们是通过 postman 工具以及 test 环境尝试,都发现接口请求速度是没有问题的。“那感觉是前端问题”?...所以 API 一直等待浏览器给它发出去的指令,以上面截图的为例,整整等待了 23.84S,它请求和响应的时间很快(最多也就几百毫秒,也就是后端所说的接口并不慢)。...至于偶现,是因为前端开发者有时候用 Chrome 会打开了多个选项卡,每个选项卡都是同一个本地开发地址,就会导致达到 SSE 的最大连接数的限制,而它的执行时间会很长,也就会阻塞其他的请求,一致等待...使用 HTTP / 2使用 HTTP / 2 时,HTTP 同一时间内的最大连接数由服务器和客户端之间协商(默认为 100)这解释了为什么我们 test 环境没有问题,因为 test 环境用的是 HTTP...文档中,我们找到 server 选项,允许设置服务器和配置项(默认为 ‘http’)。只需要加上这一行代码即可。

84150

让我们认识一下PHP非阻塞并发框架Amp

比如,当程序需要从数据库中读取大量的数据时,由于需要等待I/O操作完成,程序的执行速度会非常缓慢。 因此,我们通过事件库,程序执行的过程中,不需要等待某个任务完成才能执行下一个任务。...这种编程模式可以极大地提高程序的效率和响应速度,尤其处理复杂的I/O操作时表现得更为出色,而这就是异步编程。...事件循环监听系统级别的事件,如文件描述符的状态变化或定时器触发,而coroutine则允许代码不阻塞主线程的情况下进行暂停和恢复。...动机 传统上,PHP遵循顺序执行模型。PHP引擎按顺序一行一行执行。然而,程序通常由多个独立的子程序组成,这些子程序可以同时执行。 如果查询数据库,则以阻塞方式发送查询并等待数据库服务器响应。...每个程序都有一个执行时间段。然而,协程并不是抢占式的。他们没有固定的时间。他们必须主动给予事件循环的控制权。 任何阻塞I/O函数等待I/O时阻塞整个进程。你会想要避开他们。

10210

腾讯云TVP李智慧:同程艺龙响应式架构实践

进入等待队列会消耗资源,服务器的压力非常大。如果更多用户的请求都接受进来,服务器的压力会逐渐的增大,超过系统可用资源就会崩溃。...如果这个时候数据库里面有个表,因为什么原因响应特别的慢,这个时候线程迟迟不能释放,它不能释放别的请求就没有线程可用,就回到刚才所说的场景系统就崩溃了。这还是现在,就经常会遇到这种崩溃的情况。...传统的编程里面服务调用、方法调用,当A方法调B方法的时候,A方法的代码行里面加了一行调用B方法的代码,B方法执行的时候,A方法下一行代码一定是不执行,传统的方法调用是这样子,都是阻塞式的编程,所谓阻塞似的编程当你调用别的计算时...,当前执行一定是阻塞的,调用其他的方法执行执行完了再返回,所有的执行都是由一个线程串起来,我们的代码可以写A方法,团队合作的时候那个团队实现A方法,另外一个团队实现B方法,但是我们可以A里面调B。...第二,他们之间调用是阻塞的,我去调用B方法的时候,一旦调用B方法,B方法返回之前一定不能执行一行代码,这是强耦合的阻塞。

8.3K101

基于web界面的locust性能测试

至于写个压测为什么要用Python,是因为:这玩意心智负担低,你谷歌SO复制粘贴一把梭,直接上手就能写,大脑无需切换context,调试成本也低,没有比这语言更棒的了。...随机执行代码 代码分析: 定义了一个Locust任务,里面定义了两个类,一个UserBehavior类,用于定义测试业务,一个WebsiteUser类,用于定义模拟用户,我们定义一个模拟用户执行任务之间应该等待多长时间...Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。 Average:平均值,单位毫秒,所有请求的平均响应时间。 Min:请求的最小服务器响应时间,单位毫秒。...Max:请求的最大服务器响应时间,单位毫秒。 Content Size:单个请求的大小,单位字节。 reqs/sec:是每秒钟请求的个数。...在这个过程中,可以随时停止测试,调整参数,当然,也可以测试数据收集完成,导出测试结果: ? 测试结果 图形界面显示 ? 图形界面显示 停掉python命令,也可以看到一些测试数据: ?

2K20

基于 Angular Universal 引擎进行服务器端渲染的前端应用 State Transfer 故障排查案例

这就意味着,用户访问网页的初期可能会遇到一个空白页面,需要等待 JavaScript 文件下载、解析和运行完成才能看到完整的网页内容。...图5:Spartacus 调用 Angular Universal 引擎服务器端渲染的入口代码为什么 Angular 服务器端渲染应用需要 State Transfer要回答这个问题,我们首先要弄清楚什么是...没有使用 Angular Universal 的情况下,当用户打开网页时,浏览器首先需要下载和运行 JavaScript 代码,然后 JavaScript 代码会向服务器发送请求获取数据,最后再将数据显示视图中...这个过程可能会比较慢,因为需要等待 JavaScript 代码下载和运行,以及等待服务器响应数据请求。...this.isHydrated) {这一行检查当前代码是否浏览器环境中运行,并且还没有从 TransferState 中恢复状态。

32900

Chrome DevTools 全攻略!助力高效开发

对于上图来说就是55ms 第一行的时间代表了所有项目:例如解析 dns,建立连接,等待服务器返回数据,传输数据等 第二行的时间是 总时间 - 数据传输的时间 从上面的分析中我们看到 从客户端请求到服务器处理结束准备返回数据花了...这个时间除了等待服务器传递响应所花费的时间之外,还包括 1 次往返延迟时间及服务器准备响应所用的时间(服务器发送数据的延迟时间) Content Download(内容下载) - 接收响应数据所花费的时间... HTTP 1.0/1.1 连接协议中,Chrome 限制每个域名最多执行 6 个 TCP 连接。如果一次请求十二个资源,前 6 个将开始, 6 个将排队。...TTFB 就是等待第一个响应字节的时间,建议 200ms 以下,以下情况可能会导致高 TTFB: 客户端和服务器之间的网络条件差 要么,服务器端程序响应很慢 为了解决高 TTFB,首先去排除尽可能多的网络连接...(如果没有再刷新一下(也不清楚为什么可能会没有)) 然后刷新页面,找到刚刚想要修改的代码: 用 t.recommendList.length 替换掉 n.pageSize*t.pageNo(前两步是为了避免

1.4K10
领券