如果 Javascript 是单线程的,那么像时钟这样的东西是如何工作的?

Posted

技术标签:

【中文标题】如果 Javascript 是单线程的,那么像时钟这样的东西是如何工作的?【英文标题】:If Javascript is single threaded, how things like a clock work? 【发布时间】:2020-09-15 03:57:26 【问题描述】:

我的意思是,也许我错了,完全不理解单线程的含义,但我只是想知道:当用户在没有时钟的情况下与同一页面上的其他事物交互时,时钟如何在网页中连续工作停下来?

我以时钟为例,但它可以是任何一种元素或同时工作的元素

【问题讨论】:

codesdope.com/blog/article/… 那篇文章中的相关代码行,启动整个定时器进程的代码行,是var t = setTimeout(function() currentTime() , 1000); 有时不能,例如alert(0)。其他时候要做的事情很快。有时线程只是等待事情发生。 我以时钟为例。我的问题与了解同时执行的事情如何工作有关。 思想实验:如果setTimeout不是用javascript写的呢?它实际上不是语言的一部分。它是浏览器的一部分,因此很可能是用 C 或 C++ 等其他语言编写的。 【参考方案1】:

这是一个类比,可能不是最好的,但我希望它可以帮助你理解:


想象一下,你是一个单身妈妈,家里有三个孩子。现在是星期一早上,你必须为他们上学做准备。

所有你需要做的:

你必须喂孩子 A、B 和 C 你必须给孩子 A、B 和 C 穿衣服 你必须找到你的包 找到您的车钥匙 你必须给自己泡杯咖啡喝完 梳头

正如您想象的那样,这并不容易,也不会是线性的。妈妈不能一个接一个地执行,她会并行执行多个任务:

开始给自己泡杯咖啡,同时给孩子A穿上鞋子,斥责孩子B的烦人。

每项任务都将并行执行,并分多个步骤执行(也许她需要 5 时间才能完成孩子 A 的穿衣)

现在想象这台计算机是一个速度非常快的妈妈(1Ghz 处理器每秒将执行 1.000.000.000 次操作)

【讨论】:

以上是关于如果 Javascript 是单线程的,那么像时钟这样的东西是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

webWorker

浅谈webWorker

Node.js和PHP运行机制对比

Node.js和PHP运行机制对比

浅谈webWorker

JavaScript的执行机制