如果 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 是单线程的,那么像时钟这样的东西是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章