Node.js
Node.js是一个事件驱动I/O服务端,基于V8引擎的JavaScript运行环境。
node.js单线程是指主线程是单线程, 主线程执行程序代码, 形成执行栈。
主线程之外, 还维护一个事件队列(Event queue), 当用户异步操作时, 就放入其中, 但不会立即执行。
主线程继续执行, 直到执行完毕, 然后通过事件循环(Event Loop), 从Event queue的开头取出第一个事件, 从线程池中分配一个线程去执行, 然后第二个… 当线程池里的线程执行完, 会通知主线程, 主线程执行回调, 线程归还给线程池
整个Event Loop就是一个while
联想python:
python中的asyncio也是使用事件循环驱动的协程, 其中的事件循环不是用线程池, 而是将函数注册到事件循环上, 当满足事件发生时, 调用相应的协程函数。
python线程池: 如创建2000线程, python进程使用9GB的虚拟内存(swap), 当创建一个线程时,操作系统会预留一个虚拟内存区域来 放置线程的执行栈(通常是8MB大小)。但是这个内存只有一小片段被实际映射到真实内存中。 因此,Python进程使用到的真实内存其实很小 (比如,对于2000个线程来讲,只使用到了70MB的真实内存,而不是9GB)
安装
1 | $ sudo apt install nodejs |
基本模块
1 | // 输出变量 |