python-线程一(常识)

问题1、单进程、线程、协程的区别?

单进程:操作系统分配资源的最小单位,是一个程序的动态执行,有各自的地址空间,不同进程中使用的变量是各自独立,且互相不能访问的,进程中的变量存在各自的地址空间中,互相禁止访问。(由操作系统调度)

线程:是cpu运行的最小单位,进程至少会有一个线程,也可以多个线程,他们共享一个进程的地址空间,所有的线程使用的变量是共享的,一个进程中的所有线程默认都是可以访问。每个线程都会被分配一个任务函数,如果执行完了,线程就会退出,也会有阻塞的状态。(由操作系统调度)

协程:本质就是单线程的程序,执行不同的任务函数。(由程序员去进行调度)

注意:在python中多线程是不能垮cpu运行的,比如说一个进程里面有多个线程,只能由那1个cup来执行这多个线程,不能由其他cpu来执行

问题2:多进程、多线程、协程的使用场景?

多进程使用场景:(推荐)需要执行多个cpu密集型的任务:会比较占用操系统的资源,多进程切换,需要cpu切换上下文(进程的存储各类信息的结构),切换效率比较低,占用cpu资源。

多线程使用场景:(推荐)执行多个io(本地操作文件、网络数据传输)密集型的任务:所有线程共享一个进程的所有资源,切换的时候不需要cpu切换进程的上下文,效率高,占cpu资源很少,占操作系统资源也很少,多线程的情况下,因为只有一个cpu在执行,其他线程都是需要排队等候,所以没有真正并行效果。

协程:推荐执行多个io任务的情况,本质就是单线程,效率比多线程差不多,资源占用比多线程要更少,切换效率很高,且编程容易,不需要考虑锁,出错的可能性比较低。

问题3:并发和并行的区别?

  并发是指一个时间段内同时运行,表示的是一个区间,而并行是指在同一个时间点上都在运行,是一个点,并且并发在同一时间点上只能有一个程序在运行。

相关推荐