python多线程

Python中的多线程

GIL全局解释器锁

  线程的执行权限。Python的进程中只有一个GIL,一个线程需要执行任务,就必须要获取GIL

 好处

  直接杜绝了多线程下访问内存空间的安全问题

 缺陷

  Python多线程并非真正多线程,不能充分利用多核cpu的资源,在i/o阻塞时候,解释器会释放GIL

多线程

  密集I/O任务(网络I/O,磁盘I/O,数据库I/O)使用
多线程合适

  缺陷

  同一时间切片只能运行一个程序,不能做到高并行,但可以做到高并发

协程

  又称微线程,在单线程上执行多个任务,用函数切换,开销极小,不通过操作系统调度,无线程、进程切换开销

  与线程区别

  多线程请求返回无序,那个线程有数据返回就处理那个;而协程返回的数据是有顺序的

缺陷

  单线程执行,处理密集CPU和本地磁盘I/O时,性能较低,处理网络I/O,性能还较好

  理论上来说,线程、协程在I/O密集的操作时性能高于进程