python-线程一(常识)
Posted su_sir
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-线程一(常识)相关的知识,希望对你有一定的参考价值。
问题1、单进程、线程、协程的区别?
单进程:操作系统分配资源的最小单位,是一个程序的动态执行,有各自的地址空间,不同进程中使用的变量是各自独立,且互相不能访问的,进程中的变量存在各自的地址空间中,互相禁止访问。(由操作系统调度)
线程:是cpu运行的最小单位,进程至少会有一个线程,也可以多个线程,他们共享一个进程的地址空间,所有的线程使用的变量是共享的,一个进程中的所有线程默认都是可以访问。每个线程都会被分配一个任务函数,如果执行完了,线程就会退出,也会有阻塞的状态。(由操作系统调度)
协程:本质就是单线程的程序,执行不同的任务函数。(由程序员去进行调度)
注意:在python中多线程是不能垮cpu运行的,比如说一个进程里面有多个线程,只能由那1个cup来执行这多个线程,不能由其他cpu来执行
问题2:多进程、多线程、协程的使用场景?
多进程使用场景:(推荐)需要执行多个cpu密集型的任务:会比较占用操系统的资源,多进程切换,需要cpu切换上下文(进程的存储各类信息的结构),切换效率比较低,占用cpu资源。
多线程使用场景:(推荐)执行多个io(本地操作文件、网络数据传输)密集型的任务:所有线程共享一个进程的所有资源,切换的时候不需要cpu切换进程的上下文,效率高,占cpu资源很少,占操作系统资源也很少,多线程的情况下,因为只有一个cpu在执行,其他线程都是需要排队等候,所以没有真正并行效果。
协程:推荐执行多个io任务的情况,本质就是单线程,效率比多线程差不多,资源占用比多线程要更少,切换效率很高,且编程容易,不需要考虑锁,出错的可能性比较低。
问题3:并发和并行的区别?
以上是关于python-线程一(常识)的主要内容,如果未能解决你的问题,请参考以下文章