Node10.5.0中的线程:实用介绍几天前,Node.js的10.5.0版本发布了,它包含的主要功能之一是添加了初始(和实验性)线程支持。这很有趣,特别来来自一种总是以不需要线程为荣的语言,这要归功于它出色的异步I/O。那么为什么我们需要在Node中使用线程?快速而简单的答案是:让它在Node过去遭受的唯一领域表现出色:处理繁重的CPU密集型计算。这主要是为什么Node.js在人工智能、机器学习、数据科学等领域不强的原因。已经有很多努力来解决这个问题,但我们仍然没有像部署微服务时那样高效。所以我将尝试将初始PR和官方文档提供的技术文档简化为更实用和简单的示例集。希望这足以让你开始了。那么我们如何使用新的线程模块呢?首先,你需要一个名为“worker_threads”的模块。请注意,只有在执行脚本时使用--experimental-worker标志时,这才会起作用,否则将找不到该模块。请注意标志如何引用工作人员而不是线程,这就是整个文档中引用它们的方式:工作线程或简单的工作人员。如果您过去使用过多处理,你会发现这种方法有很多相似之处,但如果你还没有,别担心,我会尽可能多地解释。你能用它们做什么?工作线程的意思是,就像我提到的以前,对于CPU密集型任务,将它们用于I/O会浪费资源,因为根据官方文档,Node提供的处理异步I/O的内部机制比使用工作线程更有效,所以……别费心了。让我们从一个简单的例子开始您将着手创建并使用它。示例1:const{Worker,isMainThread,workerData}=require('worker_threads');letcurrentVal=0;letintervals=[100,1000,500]functioncounter(id,i){console.log("[",id,"]",i)returni;}if(isMainThread){console.log("这是主线程")for(leti=0;i<2;i++){letw=newWorker(__filename,{workerData:i});}setInterval((a)=>currentVal=counter(a,currentVal+1),intervals[2],"MainThread");}else{console.log("这不是")setInterval((a)=>currentVal=counter(a,currentVal+1),intervals[workerData],workerData);}
