事件循环

1. 事件循环的概念:

event loop is all the application code that is inside callback functions(non-top-top-level code)

2. 事件循环的步骤

强调的是两个另外的任务队列,他们执行的时机在每个主任务执行完成之后
image

3. 整个循环

这里强调的是整个事件循环的大层面,服务器启动,然后进入事件循环,执行完之后但是还是在监听是否有新的事件进入队列
image

4. 实践

image

这里为什么immediate会在setTimeout的前面,是因为事件循环的时候的轮询机制,根据执行的步骤,io操作之后的执行的是setImmediate,setTimeout是在下一轮循环的时候才会被查询到,所以先执行的是setImmediate。

5. 改变线程池的大小

一开始线程池中大概是四个线程

      const fs = require("fs");
      const crypto = require("crypto");
      
      const start = Date.now();
      
      fs.readFile("text-file.txt", () => {
      
        crypto.pbkdf2("password", "salt", 100000, 1024, "sha512", () => {
          console.log(Date.now() - start, "password encrypted");
        });
        crypto.pbkdf2("password", "salt", 100000, 1024, "sha512", () => {
          console.log(Date.now() - start, "password encrypted");
        });
        crypto.pbkdf2("password", "salt", 100000, 1024, "sha512", () => {
          console.log(Date.now() - start, "password encrypted");
        });
        crypto.pbkdf2("password", "salt", 100000, 1024, "sha512", () => {
          console.log(Date.now() - start, "password encrypted");
        });
      });

所以输出的结果差不多都是相同的时间完成的

image

增加了程序之后可以发现,4个之后的程序运行时间是成倍的

image

我们可以通过代码改变(windows上不行)

process.env.UV_THREADPOOL_SIZE = 10;
posted @ 2022-06-18 02:58  kihyun  阅读(105)  评论(0编辑  收藏  举报