多进程 and 多线程
初步认识
当一个程序进入内存运行时,即变成一个进程。进程时处于运行过程中的程序。进程是操作系统进行资源分配和调度的一个独立单位。线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程也被称为轻量级进程。线程在进程中是独立、并发的执行流。
多进程和多线程的区别
- 一个进程可以有很多线程,每条线程并行执行不同的任务。因此多线程中,所有子线程的进程号相同;多进程中,不同的子进程进程号不同。
- 多线程可以共享全局变量,多进程不能。在多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响;而多线程中,所有变量都由所有线程共享。
- 同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
- 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
- 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
- 线程执行开销小,但是不利于资源的管理和保护。进程执行开销大,但是能够很好的进行资源管理和保护。
- 两者均可并发执行。
多进程(multiprocessing)
每个事件片内将CPU 分配给某一个任务,时间片结束,CPU自动回收,再分配给另外的任务。从外部来看,所有的任务都是同时在执行,但在CPU上,任务是按照串行依次运行(单核CPU)。如果是多核,多个进程任务可以并行;但是在单核,多进程只能串行执行。
多进程的优点
- 编程相对容易:通常不需要考虑锁和同步资源的问题
- 内存隔离,一个进程崩溃不会影响其他线程,方便调试
- 可以同时运行多个任务
- 程序因IO阻塞时,可以释放CPU,让CPU为其他程序服务
- 当系统有多个CPU时,可以为多个程序同时服务
多进程的缺点
- 进程的创建和销毁过程需要消耗较多的计算机资源;
- 逻辑控制复杂,需要和主程序交互;
- 多进程调度开销比较大
- 需要跨进程边界
多线程(threading)
如果一个子任务阻塞,程序可以将CPU调度到另外一个子任务进行工作。这样CPU还是保留在本程序中,而不是被调度到别的进程去。这样,提高了本程序所获得的CPU时间和利用率。
多线程的优点
- 多线程开销小,提高了系统的并行性
- 创建速度快,方便高效的数据共享
- 线程更加轻量级,更容易切换
- 多个线程更容易管理
- 使用多线程可以把程序中占据时间长的任务放到后台去处理,如图片、视屏的下载多线程的缺点
多线程的缺点
- 大量的线程降低代码的可读性
- 更多的线程需要更多的内存空间
- 当多个线程对同一个资源出现争夺时候要注意线程安全的问题
- 没有内存隔离,单个线程崩溃会导致整个应用的退出