javascript:js使用单线程的原因

376 阅读2分钟

为什么js要使用单线程模式,而不用多线程模式?

1.javascript的单线程,与它的用途有关

javascript作为一个浏览器脚本语言,它的主要用途是与用户互动,以及操作DOM,这决定了它只能是单线程,即使H5中出现了web workers的多线程语法,还是没有改变只能有一个线程在操作(更新)页面的事实,js一开始的设计就没有考虑将js设计为单线程语言,只能说没有内置多线程支持,单线程也仅仅是相对于多线程提出的概念。

2.若javascript是多线程语言,那么会带来很复杂的同步问题,逻辑会复杂许多

设想一下,一个页面中有两个线程,分别是线程1,线程2,他们都可以操作一个span标签,如下图

在这里插入图片描述

假设开发者设计的目标是先让span的内容更新,之后再删除span标签,js是单线程的时候,代码逻辑就非常清晰,如何实现此处不再赘述

假设js是多线程的,假如线程1正在更新span内容,此时线程2也同时操作了span标签,那就可能导致文本显示给用户时出错,或者线程1正在操作span的过程中进行了线程切换到线程2将span标签删除,那么再切换回线程1时将无法获取到span标签,导致无法更新标签的内容

要解决上述问题,可以设定一个线程在操作span标签的时候,其他线程不能操作span标签,这样就增加了代码逻辑的复杂度,这样的问题在大型复杂的系统中会显得更为复杂突出。