python入门(三十五):线程和进程概述
2017-08-22 22:32
344 查看
进程与线程的历史
我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块。 进程就是一个程序在一个数据集上的一次动态执行过程。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
在早期的操作系统里,计算机只有一个核心,进程执行程序的最小单位,任务调度采用时间片轮转的抢占式方式进行进程调度。每个进程都有各自的一块独立的内存,保证进程彼此间的内存地址空间的隔离。 随着计算机技术的发展,进程出现了很多弊端,一是进程的创建、撤销和切换的开销比较大,二是由于对称多处理机(对称多处理机(SymmetricalMulti-Processing)又叫SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构)的出现,可以满足多个运行单位,而多进程并行开销过大。 这个时候就引入了线程的概念。
线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合 和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。 线程没有自己的系统资源,只拥有在运行时必不可少的资源。但线程可以与同属与同一进程的其他线程共享进程所拥有的其他资源。
进程与线程之间的关系
线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
1.进程:
优点:同时利用多个CPU,能够同时进行多个操作
缺点:消耗资源(重新开辟内存空间)
2.线程:
优点:共享内存。IO操作时候,创造并发操作(因为IO操作不利用CPU)
缺点:抢占资源
3.进程不是越多越好,最佳情况是CPU个数 = 进程个数
线程也不是越多越好,因为请求上下文切换需消耗CPU
多进程适用于计算密集型,多线程适用于IO密集型
4.GIL全局解释器锁(python特有)每个进程加一把锁,在任意指定时间内,有且只有一个线程在运行
所以说python里的多线程,并不是真正意义上的多线程
我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块。 进程就是一个程序在一个数据集上的一次动态执行过程。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
在早期的操作系统里,计算机只有一个核心,进程执行程序的最小单位,任务调度采用时间片轮转的抢占式方式进行进程调度。每个进程都有各自的一块独立的内存,保证进程彼此间的内存地址空间的隔离。 随着计算机技术的发展,进程出现了很多弊端,一是进程的创建、撤销和切换的开销比较大,二是由于对称多处理机(对称多处理机(SymmetricalMulti-Processing)又叫SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构)的出现,可以满足多个运行单位,而多进程并行开销过大。 这个时候就引入了线程的概念。
线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合 和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。 线程没有自己的系统资源,只拥有在运行时必不可少的资源。但线程可以与同属与同一进程的其他线程共享进程所拥有的其他资源。
进程与线程之间的关系
线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。
1.进程:
优点:同时利用多个CPU,能够同时进行多个操作
缺点:消耗资源(重新开辟内存空间)
2.线程:
优点:共享内存。IO操作时候,创造并发操作(因为IO操作不利用CPU)
缺点:抢占资源
3.进程不是越多越好,最佳情况是CPU个数 = 进程个数
线程也不是越多越好,因为请求上下文切换需消耗CPU
多进程适用于计算密集型,多线程适用于IO密集型
4.GIL全局解释器锁(python特有)每个进程加一把锁,在任意指定时间内,有且只有一个线程在运行
所以说python里的多线程,并不是真正意义上的多线程
相关文章推荐
- 11.python并发入门(part1 初识进程与线程,并发,并行,同步,异步)
- python之线程、进程入门
- python——进程线程、与协程基础概述
- python入门(四)--函数简要概述
- python之线程进程协成
- Python的协程,线程,进程的理解及实现
- python学习笔记 进程和线程
- python学习笔记 ---线程、进程、协程、队列、python-memcache、python-redis
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
- python笔记六:进程与线程
- Python之路,进程、线程、协程篇
- 11.python并发入门(part11 进程同步锁,以及进程池,以及callback的概念)
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
- Python进阶 - 进程与线程
- python进程、线程、协程
- python进程和线程
- python基础-信号量Semaphore(进程_线程)、事件Event(进程_线程)
- 多线程-进程和线程的概述
- Python基础学习(5)网络编程socket、文件上传、粘包问题、socketserver、IO多路复用、线程与进程、进程池、线程池、上下文管理、协程
- Python中进程和线程的总体区别