JS蜀国五虎将27级有什么任务做

下次自动登录
现在的位置:
& 综合 & 正文
Node.js异步处理CPU密集型任务
Node.js异步处理CPU密集型任务
Node.js擅长数据密集型实时(data-intensive real-time)交互的应用场景。然而数据密集型实时应用并不是只有I/O密集型任务,当碰到CPU密集型任务时,比如要对数据加解密(node.bcrypt.js),数据压缩和解压(node-tar),或者要根据用户的身份对图片做些个性化处理,在这些场景下,主线程致力于做复杂的CPU计算,IO请求队列中的任务就被阻塞。
Node.js主线程的event loop在处理所有的任务/事件时,都是沿着事件队列顺序执行的,所以在其中任何一个任务/事件本身没有完成之前,其它的回调、监听器、超时、nextTick()的函数都得不到运行的机会,因为被阻塞的event loop根本没机会处理它们,此时程序最好的情况是变慢,最糟的情况是停滞不动,像死掉一样。
一个可行的解决方案是新开进程,通过ipc通信,将CPU密集型任务交给子进程,子进程计算完毕后,再通过ipc消息通知主进程,并将结果返回给主进程[1]。
和创建线程相比,开辟新进程的系统资源占用率大,进程间通信效率也不高。如果能不开新进程而是新开线程,将CPU耗时任务交给一个工作线程去做,然后主线程立即返回,处理其他的IO请求,等到工作线程计算完毕后,通知主线程并将结果返回给主线程。那么在同时面对IO密集型和CPU密集型服务的场景下,Node.js的主线程也会变得轻松,并能时刻保持高相应度。
因此,和开进程相比,一个更加优秀的解决方案是:
1 不开进程,而是将CPU耗时操作交给进程内的一个工作线程完成。
2 CPU耗时操作的具体逻辑支持通过C++和Js实现。
3 js使用这个机制与使用IO库类似,方便高效。
4 在新线程中运行一个独立的V8 VM,与主线程的VM并发执行,并且这个线程必须
由我们自己托管。
为了实现以上四个目标,我们在Node中增加了一个backgroundthread线程,稍候会详细解释这个概念。在具体实现上,为Node增加了一个’pt_c’的内建C++模块。这个模块负责吧CPU耗时操作封装成一个Task,抛给backgroundthread,然后立即返回。具体的逻辑在另一个线程中处理,完成之后,设定结果,通知主线程。这个过程非常类似于异步IO请求。具体逻辑如下图:
BackgroundThread
Node提供了一种机制可以将CPU耗时操作交给其他线程去做,等到执行完毕后设置结果通知主线程执行callback函数。以下是一段,用来演示这个过程:
int main() {
loop = uv_default_loop();
int data[FIB_UNTIL];
uv_work_t req[FIB_UNTIL];
for (i = 0; i & FIB_UNTIL; i++) {
req[i].data = (void *) &data[i];
uv_queue_work(loop, &req[i], fib, after_fib);
return uv_run(loop, UV_RUN_DEFAULT);
其中函数uv_queue_work的定义如下:
UV_EXTERN int uv_queue_work(uv_loop_t* loop,
uv_work_t* req,
uv_work_cb work_cb,
uv_after_work_cb after_work_cb);
参数 work_cb 是在另外线程执行的函数指针,after_work_cb相当于给主线程执行的回调函数。
在windows平台上,uv_queue_work最终调用API函数QueueUserWorkItem来派发这个task,最终执行task 的线程是由操作系统托管的,每次可能都不一样。这不满足上述第四条。
因为我们要支持在线程中运行js代码,这就需要开一个V8 VM,所以需要把这个线程固定下来,特定任务,只交给这个线程处理。并且一旦创建,不管有没有task,都不能随便退出。这就需要我们自己维护一个线程对象,并且提供接口,使得使用者可以方便的生成一个对象并且提交给这个线程的任务队列。
在node进程启动初始化过程中,加入一个创建background thread对象的过程。这个线程拥有一个taskloop,有任务就处理,没有任务就等待在一个信号量上。多线程要考虑线程间同步的问题。线程同步只发生在读写此线程的incomming queue 的时候。Node的主线程生成task后,提交到这个线程的incomming queue中,并激活信号量然后立即返回。在下一次循环中,backgroundthread从incomming queue中取出所有的task,放入working queue,然后依次执行working queue中的task。主线程不访问working queue因此不需要加锁。这样做可以降低冲突。
这个线程在进入taskloop循环之前会建立一个独立的v8 VM,专门用来执行backgroundjs的代码。主线程的v8引擎和这个线程的可以并行执行。它的生命周期与Node进程的生命周期一致。
BackgroundJs
可以把所有CPU耗时逻辑放入backgroundJs中,主线程通过生成一个task,指定好运行的函数和参数,抛给工作线程。工作线程在执行task的过程中调用在backgroundJs中的函数。BackgroundJs是一个.js文件,在里面添加CPU耗时函数。
background.js代码示例:
var globalFunction = function(v){
JSON.parse(v);
var err = 'err';
var obj = JSON.parse(v);
var a = obj.param1;
var b = obj.param2;
// simulate CPU intensive process...
for(i = 0; i & ; ++i)
return (a+b).toString();
运行node.js,在控制台输入:
= process.binding('pt_c');
var obj = {param1: 123,param2: 456};
bind.jstask('globalFunction', JSON.stringify(obj), function(err, data){if(err) console.log("err"); else console.log(data);});
调用的方法是bind.jstask,稍后会解释这个函数的用法。
以下是测试结果:
上面这个实验操作步骤如下:
1 首先绑定’pt_c’内建模块
2 快速多次调用中的耗时函数,上面的实验中连续调用了三次。
当中的函数完成后,主线程接到通知在新一轮的中,调用回调函数,打印出结果。这个实验说明了耗时操作异步执行。
方法jstask总共三个参数,前两个参数为字符串,分别是background.js中的全局函数名称,传给函数的参数。最后一个参数是一个callback函数,异步留给主线程运行。
为什么用字符串做参数?
为了适应各种不同的参数类型,就需要为C++函数提供各种不同的函数实现,这是非常受限制的。C++根据函数名获取backgroundjs中的函数然后将参数传递给js。在js中,处理json字符串是非常容易的,因此采用字符串,简化了C++的逻辑,js又能够方便的生成和解析参数。同样的理由,backgroundjs中函数的返回值也为json串。
对C++的支持
在苛求性能的场景,’pt_c’允许加载一个.dll 文件到node进程,这个dll文件包含CPU耗时操作。js加载’pt_c’的时候,指定文件名即可完成加载。
代码示例:
= process.binding('pt_c');
bind.registermodule('node_pt_c.dll', 'DllInit', 'Json to Init');
bind.posttask('Func_example', 'Json_Param', function(err, data){if(err) console.log("err"); else console.log(data);});
与backgroundjs相比,加载C++模块多了一个步骤,这个步骤是调用bind.registermodule。这个函数负责将加载dll并负责对其初始化。一旦成功后,不能再加载其他模块。所有的CPU耗时操作函数都应该在这个dll文件中实现。
这篇文章提出了backgroundjs这个新的概念,扩展了Node.js的能力,解决了Node在处理CPU密集任务时的短板。这个解决方案使得使用Node的开发人员只需要关注backgroundjs中的函数。比起多开进程或者新添加模块的解决方案更高效,通用和一致。
我们的代码已经开源,您可以在 /classfellow/node/tree/Ansy-CPU-intensive-work--in-one-process
支持backgroundjs一个稳定Node版本您可以在
1 Node.js软肋之CPU密集型任务
Why you should use Node.js for CPU-bound tasks,Neil Kandalgaonkar,;
http://nikhilm.github.io/uvbook/threads.html#inter-thread-communication
&&&&推荐文章:
【上篇】【下篇】今日公告:&
最新更新:
|&&&| &| &&|
| & |&&& |& |&& |
您现在的位置:&&&&&&&&&&&&
神泣:愤怒JS45级属性武器任务详细流程
  上问下问,东摸西摸,今天终于是把45级武器任务给搞定了,写了两页纸,过程好歹被我详细记录了下来,现发出来给大家借鉴一下,过于详细了一点,而且很多废话,大家包涵,毕竟我也废了好大力气,不多写点都有点对不起自己,大家看了有用的话顶一下,让更多人也来看看  任务分两部分,先要做了36级项链任务,图三才会出现45级属性武器任务.下面是第一部分,36级项链任务:  1:到图二北部路口找(维达提斯.希度缇),坐标是(667.1827),任务名"耐之路".  2:到图二右边火之塔找火之塔管理人(雷吉尔).坐标()  3:到STM上面的血腥之塔找(索利敦),坐标(291.1384)  4:就地交任务.  5:到赤色混沌边上打一个叫"沙区克"的BOOS.得到"沙区克的头颅".坐标(),具体地点是在"色"字和"混"字之见,看地图就知道,在一个小山沟里,仔细找找就知道.  6:回血腥之塔交任务.  7:得到项链:体+4,智+4  项链任务很简单,就是要到处跑,做好项链任务就可以去图三了,正主出现.下面是45级任务流程:  1:图三城里(具体叫艾什么城忘记了,嘿嘿)找"凯恩.番布勒斯"接任务,任务名叫"伊泰纳斯的传令".城中间那个花坛(我理解为花坛)那.坐标(973.1293)  2:到城旁边杀大巨魔8个,小巨魔12个.坐标(820.1189).(友情提示一下,大小巨魔暴魔法皮革还可以,时间足又不想花钱收的人可以在这打够魔法皮革再走,这东西后面是必须的.)  3:回去交了任务后再去杀"游击兵"和"狙击兵",也是在城附近."游击兵"14个,"狙击兵"6个,坐标是()  4:交了任务后得到一封信"巴特肯的指令",自己注意看背包,要是没有.那么你上举报去投诉去吧.  5:右键点击信件接到任务"巴特肯的指令"  6:杀个BOOS."背叛者阿克雷".坐标(511.1050).得到他的头.这垃圾最烦,我自己一个JS跑去搞,打半天掉了三分之一了,BOOS自己给自己加血,几乎又满了.当时砸键盘的心都有.  7:到YLS把"阿克雷的头颅"交给"巴特肯".坐标(674.40)  8:得到"巴特肯的第二道指令".  9:到图一把"巴特肯的第二道指令"交给阿科斯".地图左上.坐标(152.1498)  10:接到任务"炼金术炼出的秘药".任务物品需要"生命果实99个(药剂商有买),灵魂核心30个(图二路口边上鱼人狂暴),阿达曼石20个(N多地方有)(其实是我不知道)  11:回到YLS找巴特肯交任务,接到新任务"神奇的铁匠"  12:到图二找"帕伯特"接任务,在"海伦湿地"边上,坐标(268.371).需要物品"金粉10个(传说是在图三什么矿山那暴得多点,我不知道,我花钱买的),魔法皮革25个(战三图三都有,上面说过了,大小巨魔那暴的多点,有人说图三多,那你去吧,遇到光明的人爽死你),黄金果90个(图一新手村那多点,而且就算是JS也可以秒怪,比较有效率).  13:准备齐了就回图二交任务吧,宝贝终于到手("灰烬封印",火属性,加精神42点,25级武器)  备注:其实后面还有后续任务,不过传说只是个40多的英勇手,我没功夫做了,反正好东西都到手了.另外在任务过程中回得到20个全恢复,具体什么时候得的我没注意,忽然就出现在包里了.我猜是"生命果"的时候得的.  这个是我的JS任务,其他职业没搞过,也不知道是不是都一样,不过大概的来说应该出入不大.其他职业的兄弟参考一下.  另:我在9区伊利斯,普利顿服务器,不用说,愤怒阵营的.名字叫"番茄鸡蛋炒饭",小号叫"鸡蛋番茄炒饭".同服的高手照顾一下下
社区精华推荐
本栏目文章点击排行
网游图片强档推荐
太平洋网站群热点
太平洋专业网站群:  ┊  ┊  ┊  ┊ 
版权所有 &太平洋游戏网
内容联系:业务洽谈:021-2 &&业务Email:
PCgames版权所有,未经授权禁止转载、摘编、复制或建立镜像,否则追究法律责任。QQ三国JS怎么升级_百度知道
应《中华人民共和国网络安全法》要求,自日起,使用互联网服务需进行帐号实名认证。为保障您的百度帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持。
QQ三国JS怎么升级
路过的人谢谢说一下
团练 。。。
采纳率:14%
然后把以前的任务全做了。然后每天做固定任务和发收集(假如有钱)到25级学了技能就出头了,做完后大约有22级我是蜀国的,领完师徒礼包换下经验然后再领刘巴的奖励就15级80%多了,我练JS是刚开始找个师傅带到15级
做任务组个XS我就是这样到27的
你找个XS结婚,再找个YY结拜,这样组队刷怪,经验多,而且你就无敌了!
其他类似问题
qq三国的相关知识
等待您来回答

我要回帖

更多关于 蜀国五虎将 的文章

 

随机推荐