,,JavaScript多线程详解

,,JavaScript多线程详解

虽然越来越多的网站在使用AJAX技术进行开发,但是构建一个复杂的AJAX应用仍然是一个难题。接下来,边肖将向您介绍JavaScript多线程。有需要的朋友可以参考一下。

虽然越来越多的网站在使用AJAX技术进行开发,但是构建一个复杂的AJAX应用仍然是一个难题。

这些困难的主要原因是什么?是服务器的异步通讯问题吗?还是GUI编程问题?通常这两个任务都是由桌面程序来完成的,那么为什么开发一个能实现同样功能的AJAX应用程序就这么难呢?

大家都知道javascript是单线程执行的,但是你也可以通过setTimeout或者setInterval定期执行一个方法。通过Ajax,当您向服务器发送请求而没有收到响应时,您可以继续执行主要逻辑。如何做到这一点?下面来讨论一下。

先看如下一段代码:

超文本标记语言

身体

脚本类型='文本/javascript '

函数printHello()

{

console . time(' hello ');

}

函数printHello1()

{

console . time end(' hello ');

}

setTimeout(printHello,1000);

setTimeout(print hello 15000);

功能等待(时间)

{

var now=date . now();

while(Date.now() - now time)

{

}

}

等等(5000);

/脚本

/body

/html

以上代码得执行结果为

你好:0.124毫秒

从代码中可以看出,printHello和printHello1几乎是同时执行的。对于多线程模型,执行间隔应该是4000毫秒。

出现上述情况的原因是setTimeout只将事件推到队列中的时间点,而不是立即执行。何时执行取决于浏览器的空闲程度。

其实虽然javascript是单线程的,但是浏览器是多线程的,典型的浏览器有如下线程:

Javascript引擎线程

界面渲染线程

浏览器事件触发线程

Http请求线程

单线程javascript是指javascript引擎线程在单线程中处理其事件队列,而浏览器是事件驱动的,很多事件是异步的,比如鼠标点击事件、setTimeout事件、Ajax回调事件。当这些事件发生时,浏览器会将这些事件放入执行队列,然后在浏览器空闲时执行它们。

另外,值得一提的是,ajax调用确实是异步的。浏览器将启动一个新线程向服务器发送请求。如果设置了回调事件,它会根据服务器返回的状态将回调事件放入事件队列。

以上是我对JavaScript多线程的理解,理解能力有限。希望大家给我宝贵的意见,一起学习。希望以上介绍对你有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: