《2019年在JavaScript中的并行语言特性.pdf》由会员分享,可在线阅读,更多相关《2019年在JavaScript中的并行语言特性.pdf(39页珍藏版)》请在三个皮匠报告上搜索。
1、在JavaScript中的 并行语言特性R/WrangerangerangeRWLockUnlock声明一个变量/标识符,使之在确定的上下文中占有存储位置。有变量1使存储位置中有值。绑定值3RW(置值后)4可以读写:var/let只读:constRW(置值前)2可以读写:var读失效:let/const声明一个标识符(作为常量),使之在确定的上下文中有确定值和存储位置。常量1绑定值3RW(置值后)4RW(置值前)2声明一个变量/标识符,使之在确定的上下文中占有存储位置。有变量1使存储位置中有值。绑定值3RW(置值后)4RW(置值前)2?一次置值的变量?声明一个变量/标识符,使之在确定的上下文中
2、占有存储位置。有变量1使存储位置中有值。绑定值3ResultState42置值之前该怎么办?怎么避免被意外置值?置值之后该怎么办?如何处理重写?一次置值的变量置值之前该怎么办?怎么避免被意外置值?置值之后该怎么办?如何处理重写?StateResultReactions1Reactions2Resolve实例置值器RejectResolving FunctionsPromise InstancePromise.resolve(Hello World).then(console.log);aPromise.then(func)aPromise.then(func).aPromise.then(fu
3、nc2,func3)aPromise.then(func).aPromise.then(func2,func3).b=aPromise.then(func2,func3)Promise.resolve(x)var p=new PromiseInstnace();var resolve,reject=.of p;resolve(x);/presult=x;return p;p2=Promise.resolve(p)var p2=new PromiseInstnace();var resolve,reject=.of p2;p.then(resolve,reject);/resolve(p);re
4、turn p2;StateResultReactions1ResolveRejectReactions2p=Promise.resolve(x)p2=p.then(f)JS类 对象 构造器面向对象的动态的名字空间 结构化异常 语句结构化的动态类型 动态执行 动态作用域多语言范型函数式的生成器 迭代器 函数是第一类的 可运行/求值的for await.of.catch.finallypromise.then()Promise()class x extends .async/awaitthen.call(p)pure promise instance结构化函数式面向对象并行动态thenabled
5、objectasync*top level-awaitimport()asyncIterator任务队列执行栈runnning execution contextexecution context stackPromiseJobs or ScriptJobsab.returncall b()call c()call f()f.RunJobs()async function foo()var x=await p;./a new promise p2=foo();12创建一个新的Promise px,其resolve/reject函数对将用作参数调用p.then()。即Promise.resolv
6、e(p)。为px创建一对新的onFulfilled/onRjected响应函数,使asyncContext指向当前栈顶执行上下文。3将响应函数onXX作参数调用px.then(),使onXX函数添加到Jobs队列。4将当前执行上下文从栈顶移除。async function foo()var x=await p;./a new promise p2=foo();/the px at here12创建一个新的Promise px,其resolve/reject函数对将用作参数调用p.then()。即Promise.resolve(p)。为px创建一对新的onFulfilled/onRjected响
7、应函数,使asyncContext指向当前栈顶执行上下文。3将响应函数onXX作参数调用px.then(),使onXX函数添加到Jobs队列。4将当前执行上下文从栈顶移除。async function foo()var x=await p;./a new promise p2=foo();/the px at hereawait pcall px.then(onFulfilled,.call p.then(resolve_px,.andin executor of promise pxasync function foo()var x=await p;./a new promise p2=fo
8、o();/the px at herereturn xin onFulfilled/loaded is promise for modules namespace loaded=import(a_module_path);loaded.then(function(namespace);./loaded is promise for modules namespace loaded=import(a_module_path);loaded.then(function(namespace);.namespace=await loaded;var x,y,z=namespace;var x,y,z=
9、await import(a_module_path);JS.returnf.RunJobs()ScriptEvaluationJob()TopLevelModuleEvaluationJob()PromiseResolveThenableJob()PromiseReactionJob()任务队列PromiseJobs or ScriptJobs/node-experimental-worker test.js const Worker=require(worker_threads);let workerData=seq:id,buff:sab;let worker=new Worker(filename,workerData);worker.on(message,msg=process.emit(msg,worker);processworkersabprocess有锁共享结构消息通讯workerData.sabworkersabprocesshttps:/ Redpoll=require(redpoll);var def=Redpoll.infra.taskhelper;var taskDef=x:def.run(.),y:def.map(.),promised:function(taskResult).https:/