杭州网站网络 科技公司,wordpress房地产,做运营需要具备什么能力,汕头网站建设方案维护为什么80%的码农都做不了架构师#xff1f; 关于Node.js的第一个基本概念是I/O操作开销是巨大的#xff1a; 所以#xff0c;当前变成技术中最大的浪费来自于等待I/O操作的完成。有几种方法可以解决性能的影响#xff1a; 同步方式#xff1a;按次序一个… 为什么80%的码农都做不了架构师 关于Node.js的第一个基本概念是I/O操作开销是巨大的 所以当前变成技术中最大的浪费来自于等待I/O操作的完成。有几种方法可以解决性能的影响 同步方式按次序一个一个的处理请求。利简单;弊任何一个请求都可以阻塞其他所有请求。 开启新进程每个请求都开启一个新进程。利简单;弊大量的链接意味着大量的进程。 开启新线程每个请求都开启一个新线程。利简单而且跟进程比对系统内核更加友好因为线程比进程轻的多;弊:不是所有的机器都支持线程而且对于要处理共享资源的情况多线程编程会很快变得太过于复杂。 第二个基本概念是每个连接都创建一个新线程是很消耗内存的(例如你可以对比Nginx回想一下Apache内存耗尽的情景)。 Apache是多线程的它为每个请求开启一个新的线程(或者是进程这取决于你的配置)当并发连接增多时你可以看看它是怎么一点一点耗尽内存的。Nginx和Node.js不是多线程的因为线程的消耗太“重”了。它们两个是单线程、基于事件的这就把处理众多连接所产生的线程/进程消耗给消除了。 Node.js中你的代码运行在单线程之中 确实只有一个线程你不能并行执行任何代码比如下面的“sleep”将会阻塞sever1秒钟 while(new Date().getTime() now 1000) {// do nothing} 当这段代码运行时Node.js不会响应客户端任何请求因为只有一个线程来运行你的代码另外如果你执行cpu密集的任务比如重设图像的大小它也会阻塞所有请求。 ……然而除了你的代码其它的一切都是并行执行的 单线程没法让代码并行执行。但是所有I/O操作都是事件驱动、并行的所以下面的代码不会阻塞server c.query(SELECT SLEEP(20);, function (err, results, fields) {if (err) {throw err;}res.writeHead(200, {Content-Type: text/html});res.end(Return from async DB query );c.end();}); 如果你在一次请求中执行这些当数据库sleep时其他请求也会立即被处理。 为什么异步比较好?什么时候我们应该从同步转移到异步/并行执行呢? 同步执行也不错因为它简便了我们敲代码。但在使用异步时你不必关心后端是怎么处理的。而且在I/O操作时不会阻止其他请求同时无需承担每个请求所产生的线程/进程的成本。 I/O操作时使用异步处理很好因为I/O操作的成本比单纯执行代码要高的多我们应该在等待I/O时做其它更有意义的工作。 转载于:https://my.oschina.net/freax/blog/413785