`
abcde5342376
  • 浏览: 34790 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

Concurrent.Thread,它是一个允许进行多线程编程的库,应用它可以大大缓解上文提及的在 AJAX开发中与异步通信相关的困难。这是一个用写成的免费的软件库,使用它的前提是遵守Mozilla Public License和GNU General Public License这两个协议。你可以从他们的网站 下载源代码。

马上来下载和使用源码吧!假定你已经将下载的源码保存到一个名为Concurrent.Thread.js的文件夹里,在进行任何操作之前,先运行如下程序,这是一个很简单的功能实现:

执行这个程序将会顺序显示从0开始的数字,它们一个接一个出现,你可以滚屏来看它。现在让我们来仔细研究一下代码,他应用while(1)条件制造了一个不会中止的循环,通常情况下,象这样不断使用一个并且是唯一一个线程的程序会导致浏览器看起来象冻结了一样,自然也就不会允许你滚屏。那么为什么上面的这段程序允许你这么做呢?关键之处在于while(1)上面的那条Concurrent.Thread.create()语句,这是这个库提供的一个方法,它可以创建一个新线程。被当做参数传入的函数在这个新线程里执行,让我们对程序做如下微调:

在这个程序里有个新函数f()可以重复显示数字,它是在程序段起始定义的,接着以f()为参数调用了两次create()方法,传给create()方法的第二个参数将会不加修改地传给f()。执行这个程序,先会看到一些从0开始的小数,接着是一些从100,000开始的大数,然后又是接着前面小数顺序的数字。你可以观察到程序在交替显示小数和大数,这说明两个线程在同时运行。

让我来展示Concurrent.Thread的另外一个用法。上面的例子调用create()方法来创建新线程。不调用库里的任何APIs也有可能实现这个目的。例如,前面那个例子可以这样写:

在script 标签内,很简单地用写了一个无穷循环。你应该注意到标签内的type属性,那里是一个很陌生的值(text/x- script.multithreaded-js),如果这个属性被放在script标签内,那么Concurrent.Thread就会在一个新的线程内执行标签之间的程序。你应当记住一点,在本例一样,必须将Concurrent.Thread库包含进来。

有了Concurrent.Thread,就有可能自如的将执行环境在线程之间进行切换,即使你的程序很长、连续性很强。我们可以简要地讨论下如何执行这种操作。简言之,需要进行代码转换。粗略地讲,首先要把传递给create()的函数转换成一个字符串,接着改写直至它可以被分批分次执行。然后这些程序可以依照调度程序逐步执行。调度程序负责协调多线程,换句话说,它可以在适当的时候做出调整以便每一个修改后的函数都会得到同等机会运行。 Concurrent.Thread实际上并没有创建新的线程,仅仅是在原本单线程的基础上模拟了一个多线程环境。

虽然转换后的函数看起来是运行在不同的线程内,但是实际上只有一个线程在做这所有的事情。在转换后的函数内执行同步通信仍然会造成浏览器冻结,你也许会认为以前的那些问题根本就没有解决。不过你不必耽心,Concurrent.Thread提供了一个应用 的异步通信方式实现的定制通信库,它被设计成当一个线程在等待服务器的响应时允许其它线程运行。这个通信库存于 Concurrent.Thread.Http下。它的用法如下所示:

get()方法,就像它的名字暗示的那样,可以通过HTTP的GET方法获得指定URL的内容,它将目标URL作为第一个参数,将一个代表HTTP 请求头的数组作为可选的第二个参数。get()方法与服务器交互,当得到服务器的响应后就返回一个XMLHttpRequest对象作为返回值。当 get()方法返回时,已经收到了服务器响应,所以就没必要再用回调函数接收结果。自然,也不必再耽心当程序等待服务器的响应时浏览器冻结的情况了。另外,还有一个 post()方法可以用来发送数据到服务器:

post()方法将目的URL作为第一个参数,要发送的内容作为第二个参数。像get()方法那样,你也可以将请求头作为可选的第三个参数。

如果你用这个通信库实现了第一个例子当中的getArticle()方法,那么你很快就能应用文章开头示例的那种简单的方法写出 getArticleWithCache(),backgroundLoad ()以及其它调用了getArticle()方法的函数了。即使是那版backgroundLoad()正在读文章数据,照例还有另外一个线程可以对用户请求做出响应,浏览器因此也不会冻结。现在,你能理解在中应用多线程有多实用了?
想了解更多

我向你介绍了一个可以在中应用多线程的库:Concurrent.Thread。这篇文章的内容只是很初级的东西,如果你想更深入的了解,我推荐您去看the tutorial。它提供有关Concurrent.Thread用法的更多内容,并列出了可供高级用户使用的文档,是最适合起步的材料。访问他们的网站也不错,那里提供更多信息。

分享到:
评论

相关推荐

    js多线程--很好用的东东

    总的来说,JavaScript多线程是现代Web开发中不可或缺的一部分,它帮助开发者克服单线程执行的局限性,提升应用性能。通过学习和掌握Web Workers、Service Workers等技术,开发者可以构建更高效、更响应迅速的Web应用...

    JavaScript多线程的实现方法(gif).txt

    ### JavaScript多线程的实现方法 #### 背景与概念 在JavaScript中,传统的单线程模型限制了其在复杂应用中的性能表现。随着Web应用程序功能日益强大,多线程的支持变得越来越重要。虽然原生JavaScript是基于事件...

    Concurrent.Thread.js多线程执行大批量函数

    介绍了一个可以在JavaScript中应用多线程的库:Concurrent.Thread,内有多线程库脚本,以及使用说明和实例,如果查看详情,可以查看我的博客https://blog.csdn.net/hsl_1990_08_15/article/details/84765772

    一个JavaScript多线程函数库 使用说明

    本文将深入探讨一个JavaScript多线程函数库的使用方法,帮助开发者更好地理解和利用这一特性。 ### 一、Web Workers:JavaScript的多线程基础 Web Workers是JavaScript实现多线程的核心技术,它允许在后台线程中...

    一个JavaScript多线程函数库

    "一个JavaScript多线程函数库"的目标就是提供这样的解决方案,允许开发者并行执行多个JS函数,提高应用性能。这个库可能利用Web Workers或者其他的并发策略,如Promise.all、async/await等,来实现后台处理任务,而...

    javascript模拟多线程

    根据提供的文件名,Concurrent.Thread-full-20090713.js可能是一个早期尝试模拟JavaScript多线程的库。这类库通常会利用上述提到的Web Workers或者其他技术,创建一种抽象的线程概念,使得开发者可以通过类似多线程...

    Concurrent.Thread.js javascript多线程

    `Concurrent.Thread.js` 是一个由日本人编写的JavaScript多线程库,它为JavaScript环境提供了类似传统多线程的能力,帮助开发者更有效地管理任务,避免UI阻塞,提升应用性能。 `Concurrent.Thread.js` 库主要基于...

    一个JavaScript多线程函数

    总结来说,JavaScript多线程主要依赖于Web Workers,它们为JavaScript提供了异步处理能力,使开发者能够处理复杂的计算任务,同时保持用户界面的流畅。尽管Web Workers有其限制,但它们极大地扩展了JavaScript的功能...

    javascript多线程

    总结来说,JavaScript多线程主要通过Web Workers、Service Workers、SharedArrayBuffer和Atomics等技术实现,旨在提升Web应用的性能和用户体验。在实际开发中,我们需要根据应用场景选择合适的多线程方案,并注意...

    JavaScript多线程编程简介.txt

    ### JavaScript多线程编程简介 #### 一、引言 在传统的JavaScript开发中,由于其单线程特性,处理复杂的异步操作时容易导致界面阻塞或者响应延迟等问题。为了解决这一问题,并提高Web应用的性能和用户体验,开发者...

    Hamsters.js, 100%个普通Javascript多线程&并行执行库.zip

    Hamsters.js, 100%个普通Javascript多线程&并行执行库 Hamsters.js作者:奥斯汀K 。 史密斯网站: Hamsters.io描述: 100%个普通Javascript多线程&并行执行库许可证: 艺术许可 2.0 环境支持所有主流浏览器 IE9 +现有网

    AutoJs源码-例子-多线程使用

    AutoJs源码-例子_多线程使用。本资源购买前提醒:本源码都是实际autojs项目模板,安装好autojs直接运行即可打开。1、支持低版本autojs。2、资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担...

    日本人写的js多线程库Concurrent.Thread-full-20080319.zip

    日本人写的js多线程库Concurrent.Thread-full-20080319.zip 日本人写的js多线程库Concurrent.Thread-full-20080319.zip 日本人写的js多线程库Concurrent.Thread-full-20080319.zip

    JavaScript多线程详解

    JavaScript通过事件循环(Event Loop)和异步编程模型来实现多任务处理,尽管它本身不支持真正的多线程。 在JavaScript中,所有代码都是在JavaScript引擎线程中执行的,这个线程负责解释和执行代码。由于JavaScript...

    JavaScript单线程还是多线程

    这意味着在任何时候,JavaScript引擎只会执行一个任务,避免了多线程可能导致的竞态条件和死锁问题。 然而,随着Web应用复杂性的增加,单线程模型的限制逐渐显现,如处理大量计算或长时间阻塞的I/O操作时,会阻塞...

    vue3中使用Web Worker多线程(JS原味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

Global site tag (gtag.js) - Google Analytics