我有一个已经移至JXcore多线程中的node.js应用程序,但无法弄清楚如何重置任务。在当前的实现中,服务器创建一个子进程并一次发送作业。
当作业耗时超过X秒时,主进程将杀死子进程并跳过正在运行的任务并将其记录下来。任何工作的时间不应超过X秒。
到目前为止,我已经很轻松地将队列系统移至JXcore中,并且可以按预期工作,但是我还不知道如何解决正在运行的任务。
最佳答案
看起来有能力终止正在运行的任务是一项必需的功能,因为有人已经问过相同的问题,并且已经在此处回答:Thread lifetime management。
即将发布的JXcore版本将具有jxcore.tasks.killThread()
。逻辑是这样的:一个任务会通知主线程它刚刚启动,然后主线程可能会开始计算杀死线程的超时,例如:
// main thread receives the message from a task
jxcore.tasks.on("message", function(threadId, obj){
if(obj.started){
//kill the task after a second
setTimeout(function(){
jxcore.tasks.killThread(threadId);
console.log("thread killed", threadId);
},1000);
}
});
// adding a task
jxcore.tasks.addTask( function() {
// informing the main thread, that task is just started
process.sendToMain({started:true});
// looping forever
while(true){};
console.log("this line will never happen.");
});