机制概述和线程池
Node本身依赖多个库。其中之一是libuv,神奇的处理异步事件队列和执行的库。
Node利用尽可能多的利用操作系统内核实现现有的功能。像生成响应请求(request),转发连接(connections)并委托给系统处理。例如,传入的连接通过操作系统进行队列管理,直到它们可以由Node处理。
您可能听说过,Node有一个线程池,你可能会疑惑:“如果Node会按次序处理任务,为什么还需要一个线程池?”这是因为在内核中,不是所有任务都是按异步执行的。在这种情况下,Node.JS必须能在操作时将线程锁定一段时间,以便它可以继续执行事件循环而不会被阻塞。
下面是一个简单的示例图,来表示他内部的运行机制:
┌───────────────────────┐
╭──►│ timers │
│ └───────────┬───────────┘
│ ┌───────────┴───────────┐
│ │ pending callbacks │
│ └───────────┬───────────┘ ┌──────────────┐
│ ┌───────────┴───────────┐ │ incoming: │
│ │ poll │◄──┤ connections, │
│ └───────────┬───────────┘ │ data, etc. │









