`
q445862108
  • 浏览: 83428 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

js 线程

    博客分类:
  • js
 
阅读更多
Concurrent.Thread API中文文档
API原文(日文):http://jsthread.sourceforge.net/cgi-bin/wiki/wiki.cgi?page=API_Specification
Goal(目标)

//运行函数中的线程var ui_t = Concurrent.Thread.create(function(){ var i = 0; while ( 1 ) { document.body.innerHTML = "Now calculating..."                            + ['|', '/', '-', '\'][i]; i = (i+1) % 4; Concurrent.Thread.sleep(1000); }});

//時間がかかりそうな計算をする(別スレッド化された)関数var fibonacci = Concurrent.Thread.compile(function(x){ function fib ( n ) { return n <= 1  ?  1  :  fib(n-2) + fib(n-1); } var arr = new Array(); for ( var i=0;  i < x;  i++ ) arr.push(fib(i)); return arr;});

//主线程.var main_t = Concurrent.Thread.create(function(){ var calc_t = fibonacci.async(null, [1000]);  //从1000开始运行线程 var result = calc_t.join();                  //等待运行完的结果 ui_t.kill();                                 //バーを回していたスレッドを停止 focument.body.innerHTML = "Now calculating...finised.<br>\n"; for ( var i=0;  i < result.length;  i++ ) { document.body.innerHTML += i + ": " + result[i] + "<br>\n"; }});

主要的目标是下面3点

    * 提供对象的线程库
    * 可以使用多线程化函数(包括JavaScript函数组)
    * 解决了JavaScript通常的域,可以ajax输入多线程化代码的参数.

名前空間(命名空间)

本库使用「Concurrent」作为命名空间,「Thread」定义为构造器.本库的其他名称都在「Concurrent.Therad」下定义.
Concurrent.Thread 对象(object)

virtual-thread表示对象.包括生成线程的静态方法,操作线程的方法.
継承(继承)

    * → Object

static方法
prepare( func )

返回函数的javascript的代码.
compile( func )

virtual-thread 执行func.返回func执行结果.和下面的代码相同.

eval(Concurrent.Thread.prepare(func))

create( func, arg1, arg2, ... )

新建一个 virtual-thread,执行这个func.arg1, arg2, ... 为传入func的参数.和下面的代码相同.

Concurrent.Thread.compile(func).async(null, [arg1, arg2, ...])

返回 Concurrent.Thread对象.
self( )

获取当前 Concurrent.Thread 对象.virtual-thread化的,native-thread(通常的script)执行是返回null.
sleep( t )

当前运行的 virtual-thread 暂停 t ms.使用 notify方法可以中断暂停.
stop( )

使当前运行的virtual-thread进入停止状态.使用 notify方法恢复运行.下面是基本的用法.

try { Concurrent.Thread.stop();}catch ( e ) { if ( e instanceOf Concurrent.Thread.KillException ) { throw e; } else if ( e instanceof SomeOtherException ) { do_something(); } . . .}

yield( )

非独占CPU.和下面相等.

Concurrent.Thread.sleep(0)

instance  接口方法
th.join( )

th线程执行完后,当前的virtual-thread 待机.thが実行した関数の戻り値を返す.下記の notify でキャンセルできる.後述の「例外の伝播」も参照.

戻り値としてスレッドthの上で実行された関数の戻り値を返す.
th.kill( s )

和下面的相同.

th.notify( new Concurrent.Thread.KillException(s) )

th.notify( e )

在线程th中抛出异常.解除th中sleep,stop,join的待机状态.
Concurrent.Thread.KillException オブジェクト

从线程外部强制结束线程.与通常的相同可以使用 catch来取消.
継承

    * → Data.Error.Exception
    * → Error
    * → Object

instance属性
thread

例外の発生元である Concurrent.Thread オブジェクトへの参照を保持する.
Function 对象扩展
instance方法
f.async(this_val, args)

新建线程,调用函数f.this_val为this,args为参数数组.

返回一个Concurrent.Thread对象.
分享到:
评论
1 楼 ywxowen999 2011-09-19  
这位兄弟,不知道你研究过Concurrent.Thread的源码没?我看你对此有所研究,想请教一个问题。Concurrent.Thread的源代码中出现大量的with嵌套,代码如下:
(function() {
	
	if ( !this.Math || ( typeof this.Math != 'object' && typeof this.Math != 'function' ) )
		this.Math = new Object();
	if ( this.Math.ToInteger === undefined )
		this.Math.ToInteger = undefined;
	if ( this.Math.ToInt32 === undefined )
		this.Math.ToInt32 = undefined;
	if ( this.Math.ToUInt32 === undefined )
		this.Math.ToUInt32 = undefined;
	if ( this.Math.ToUInt16 === undefined )
		this.Math.ToUInt16 = undefined;
		
	with ( function(){
		with ( Math ) {
	
			return function () {
				var VERSION = '0.0.0';
				var NAMESPACE;
			
				NAMESPACE = 'Math';
			
				// This module provides functions emulating the integral type
				// conversions defined in ECMA-262 3rd.
			
				function ToInteger ( n ) {
					return n < 0 ? ceil(n)
					: floor(n) || 0;
				}
			
				function ToInt32 ( n ) {
					return n | 0;
				}
			
				function ToUInt32 ( n ) {
					return n >>> 0;
				}
			
				function ToUInt16 ( n ) {
					return n & 0xFFFF;
				}
			
				return {
					'ToUInt16': ToUInt16,
					'ToUInt32': ToUInt32, 
					'ToInt32': ToInt32, 
					'ToInteger': ToInteger
				};
			}();
		}
	}.call(null) ) {
		this.Math.ToUInt16 = ToUInt16;
		this.Math.ToUInt32 = ToUInt32;
		this.Math.ToInt32 = ToInt32;
		this.Math.ToInteger = ToInteger;
	}
}).call(null);

我不明白为什么他需要这样写,有什么优点?
不能按照下面这种方式来写嘛?
(function() {
	
	if ( !this.Math || ( typeof this.Math != 'object' && typeof this.Math != 'function' ) )
		this.Math = new Object();
	if ( this.Math.ToInteger === undefined )
		this.Math.ToInteger = undefined;
	if ( this.Math.ToInt32 === undefined )
		this.Math.ToInt32 = undefined;
	if ( this.Math.ToUInt32 === undefined )
		this.Math.ToUInt32 = undefined;
	if ( this.Math.ToUInt16 === undefined )
		this.Math.ToUInt16 = undefined;
		
	this.Math.ToUInt16 = function ToUInt16 ( n ) {
					return n & 0xFFFF;
	}	
	
	this.Math.ToUInt32 = function ToInt32 ( n ) {
		return n | 0;
	}	
	
	this.Math.ToInt32 = function ToInt32 ( n ) {
		return n | 0;
	}
	
	this.Math.ToInteger = function ToInteger ( n ) {
		return n < 0 ? ceil(n) : floor(n) || 0;
	}
	
}).call(null);

相关推荐

    js线程睡眠方法.txt

    js线程睡眠

    javascript 线程式的进度条

    在JavaScript中实现线程式的进度条加载大数据量的表格是一项技术挑战,因为它涉及到浏览器的单线程执行模型以及异步编程。在这个场景下,我们主要关注三个知识点:进度条实现、大数据量表格处理和JavaScript的异步...

    一个JavaScript线程控制函数库.rar

    一个可以在JavaScript中应用多线程的库:Concurrent.Thread,如果你想更深入的了解,推荐您去看the tutorial。它提供有关Concurrent.Thread用法的更多内容,并列出了可供高级用户使用的文档,是最适合起步的材料。 ...

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

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

    javascript模拟多线程

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

    Javascript定时器 一 单线程

    本篇文章将深入探讨JavaScript定时器的工作原理以及它们在单线程环境中的行为。 ### 一、JavaScript的单线程模型 JavaScript是一种解释型的、基于原型的、动态类型的脚本语言,它的执行环境主要是Web浏览器中的...

    JavaScript单线程还是多线程

    它的核心特性之一是单线程(Single-Threaded),这也是JavaScript设计时的重要考量,以确保代码执行的简单性和一致性。本文将深入探讨JavaScript的单线程模型以及与之相关的并发机制。 在计算机编程中,线程是程序...

    Node.js-Microjob是Node.js线程的一个微小封装旨在使用匿名函数执行繁重的CPU负载

    Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,以其异步、非阻塞I/O模型而闻名,非常适合处理网络请求和I/O密集型任务。然而,对于CPU密集型任务,Node.js的单线程事件循环模型可能会成为性能瓶颈。为了...

    基于J2V8的Orange动态UI组件化框架.zip

    一个容器对应有一个JavaScript线程,容器loadUrl来加载一个JavaScript文件,并使用JavaScript解释器执行JavaScript代码。一个JavaScript文件被认为是一个页面,同时容器控制着页面的生命周期。 ### JS线程 JS线程...

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

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

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

    标题“js多线程--很好用的东东”暗示我们将讨论JavaScript中的多线程解决方案,这可能包括Web Workers、Service Workers或其他相关技术。这些技术允许JavaScript在后台运行额外的线程,以便在不影响主线程的情况下...

    再谈JavaScript线程

    总结一下,JavaScript线程模型虽然本质上是单线程的,但通过HTML5的Web Worker等技术,可以实现多线程的效果。这为处理长时间运行的耗时任务提供了可能,同时不会阻塞UI渲染,提高了应用的响应性和性能。同时,了解...

    Concurrent.Thread.js javascript多线程

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

    threads4js:一个轻量级的 javascript 线程库

    一个轻量级的 javascript 线程实现 用法 可以使用传统的脚本标签将threads4js包含在页面中 &lt; script src =" threads4js.js " &gt; &lt;/ script &gt; 或需要为CommonJS的风格模块,由预编译或不具有预编译在线...

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

    JavaScript,作为一种广泛应用于Web开发的脚本语言,一直以来都是单线程执行的,这限制了其在处理大量计算任务或长时间运行操作时的性能。然而,随着技术的发展,JavaScript已经引入了多线程功能,以应对现代Web应用...

    Node.js-一个能在单独的线程中执行Node.js函数的零依赖库

    Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,它的默认设计是单线程的,主要依赖异步I/O和事件驱动来实现高效的非阻塞I/O操作。然而,对于CPU密集型的任务,这种模式可能会导致性能瓶颈,因为所有计算都...

    一个JavaScript多线程函数库

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

    winform多线程计算调用js

    总之,Winform应用中的多线程调用JavaScript需要结合WebBrowser控件、多线程技术和线程同步技巧。通过正确地组织代码,可以在不阻塞用户界面的情况下,充分利用JavaScript的计算能力,提升应用程序的用户体验。

    zhaoguolei1024#AutoJsExample#多线程.js1

    # 多线程.js//线程暂停//线程停止//定义一个线程//线程开始执行//等待线程执行完闭。

Global site tag (gtag.js) - Google Analytics