Node.JS和Python 关于单线程和异步IO

时间:2023-01-20 18:18:14

很多人都说Python是伪多线程的, 其实是单线程的. Node.JS也是单线程的. 所以我就在网上搜了一下, 然后自己做对比整理.

这里只说结论,不说原因.

Python

1. Python其实是多线程的, 只是解释器有个GIL(Global Interpreter Lock),只能同时执行一个线程, 在Python2中,是执行1000行字节码以后切换线程. Python3中是执行15毫秒以后切换线程.

2.Python在执行io操作的时候会解除GIL, 比如文件的IO,和网络IO.

3.Python在3.4开始支持asyncio, 3.5加入新的语法async等. 异步io和协程有关,都说协程是单线程的,是指Python代码的解释是单线程的.但是其中的io操作时交给其他线程来完成的.

4.事件驱动和异步io原理一样.由一个event_loop一直监听.其他线程完成任务以后,通知event_loop.

JavaScript和Node.JS

1.js是单线程是指只有一个线程在执行js代码.但实际上还有其他的线程:处理AJAX请求的线程、处理DOM事件的线程、定时器线程、读写文件的线程等。这些线程称为工作线程。

2.Node.JS的异步io和事件驱动原理和Python的一样.


参考:浅谈我对协程的理解

深入理解 GIL:如何写出高性能及线程安全的 Python 代码

Python的GIL是什么鬼,多线程性能究竟如何

node单线程异步,基于事件驱动的理解

Nodejs的单线程、异步IO与事件驱动

Python黑魔法 --- 异步IO( asyncio) 协程