node.js(1)同步和异步:

79 阅读1分钟

进程和线程:

进程(厂房):

程序运行的环境。

  •  进程里面包含多个线程
线程(工人):
  •  线程就是实际运行运算的东西。

同步:

  1.  通常情况代码都是自上而下一行一行执行的
  2.  前边的代码不执行后边的代码也不会执行
  3.  同步的代码执行会出现阻塞的情况
  4.  一行代码执行慢会影响到整个程序的执行

解决同步问题:

java python:
  • 通过多线程来解决,创建多个线程
node.js:
  • 通过异步方式来解决
function sum(a,b,cb) { 
const begin = Date.now();
setTimeout(() => { 
cb(a+b) 
},10000) 
} 
const result = sum(123,456 (result) => { 
console.log(result) 
}) 
console.log("node.js异步实现")
 
异步
  •  一段代码块的执行不会影响到其他的程序
 异步的问题:
  • 异步的代码无法通过return来设置返回值
特点:
  •  不会阻塞其他代码的执行
  •  需要通过回调函数来返回结果  
现实生活中:
  1. 点菜
  2. 厨师做菜
function sum(a,b,cb) { 
     setTimeout(() => { 
     cb(a+b)
     },10000)
} 
//要在原计算结果再进行计算 
//死亡回调函数 
const result = sum(3,8,(result) => { 
    sum(result,777,(result) => { 
        sum(result,178,(result) => { 
                sum(result,188,(result) => { 
                    console.log(result)
                })
        }) 
   }) 
})
 
基于回调函数的异步带来的问题:
  • 代码可读性差
  • 可调试性差
 解决问题:
  •  需要一个东西,可以代替回调函数来给我们返回结果
  •  Promise横空出世
    • 1. Promise是一个可以用来存储数据的对象
    • 2. Promise 存储数据的方式比较特殊
    • 3. 这种特殊方式使得Promise可以用来存储异步调用的数据