很多人都说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 代码