03: 进程、线程、协程

1.1 进程与线程简介

  1、什么是进程(process)?(进程是资源集合)

      1. 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,这种执行的程序就称之为进程

      2. 程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念

      3. 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。

      4. 进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。

      5. 进程之间有自己独立的内存,各进程之间不能相互访问

      6. 创建一个新线程很简单,创建新进程需要对父进程进行复制

      多道编程: 在计算机内存中同时存放几道相互独立的程序,他们共享系统资源

      单道编程: 计算机内存中只允许一个的程序运行

  2、有了进程为什么还要线程?

    1. 进程优点:

提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率

    2. 进程的两个重要缺点

a. 第一点:进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。

b. 第二点:进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。

c. 例如,我们在使用qq聊天, qq做为一个独立进程如果同一时间只能干一件事,那他如何实现在同一时刻 即能监听键盘输入、又能监听其它人给你发的消息

d. 你会说,操作系统不是有分时么?分时是指在不同进程间的分时呀

e. 即操作系统处理一会你的qq任务,又切换到word文档任务上了,每个cpu时间片分给你的qq程序时,你的qq还是只能同时干一件事呀

  3、什么是线程(thread)(线程是操作系统最小的调度单位)

      1. 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位

      2. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务

      3. 无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行

      4. 进程本身是无法自己执行的,要操作cpu,必须创建一个线程,线程是一系列指令的集合

      5. 所有在同一个进程里的线程是共享同一块内存空间的,不同进程间内存空间不同

      6. 同一个进程中的各线程可以相互访问资源,线程可以操作同进程中的其他线程,但进程仅能操作子进程

      7. 两个进程想通信,必须要通过一个中间代理

      8. 对主线程的修改可能回影响其他子线程,对主进程修改不会影响其他进程因为进程间内存相互独立,但是

          同一进程下的线程共享内存

  4、进程和线程的区别

      启动一个线程比启动一个进程快,运行速度没有可比性。

      先有一个进程然后才能有线程。

      1、进程包含线程

      2、线程共享内存空间

      3、进程内存是独立的(不可互相访问)

      4、进程可以生成子进程,子进程之间互相不能互相访问(相当于在父级进程克隆两个子进程)

      5、在一个进程里面线程之间可以交流。两个进程想通信,必须通过一个中间代理来实现

      6、创建新线程很简单,创建新进程需要对其父进程进行克隆。

      7、一个线程可以控制或操作同一个进程里面的其它线程。但进程只能操作子进程。

      8、父进程可以修改不影响子进程,但不能修改。

      9、线程可以帮助应用程序同时做几件事

  5、进程和程序的区别

      1. 程序只是一个普通文件,是一个机器代码指令和数据的集合,所以,程序是一个静态的实体

      2. 而进程是程序运行在数据集上的动态过程,进程是一个动态实体,它应创建而产生,应调度执行因等待资

          源或事件而被处于等待状态,因完成任务而被撤消

      3. 进程是系统进行资源分配和调度的一个独立单位

      4.一个程序对应多个进程,一个进程为多个程序服务(两者之间是多对多的关系)

      5. 一个程序执行在不同的数据集上就成为不同的进程,可以用进程控制块来唯一地标识每个进程

1.2 多线程

时间: 2024-10-19 12:41:06

03: 进程、线程、协程的相关文章

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

初识进程 线程 协程(三):协程

协程:(又称微线程,也是交替运行) 进程-->线程-->协程 协程就是充分利用cpu给该线程的时间,多个协程只使用一个线程,某个任务遇到阻塞,执行下一个任务.如果一个线程只执行一个任务,比较容易进入阻塞队列,如果这条线程永远在工作(协程:一个线程执行多个任务),永远不会进入阻塞队列. 适用场景:    当程序中存在大量不需要CPU的操作时(IO) 特点: 每次都能从上次暂停的位置继续执行 三种实现方式: 1.yield(生成器) 生成器:一边计算一边循环的机制 def a(): ......

python的进程/线程/协程

1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有一个线程被执行. 多线程的特点: 线程比进程更轻量级,创建一个线程要比创建一个进程快10-100倍. 线程共享全局变量. 由于GIL的原因,当一个线程遇到IO操作时,会切换到另一个线程,所以线程适合IO密集型操作. 在多核cpu系统中,最大限度的利用多核,可以开启多个线程,开销比进程小的多,但是这并

进程线程协程那些事儿

一.进程与线程 1.进程 我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程.当程序出于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了. 进程就是一个程序在一个数据集上的一次动态执行过程.进程由程序,数据集,进程控制块三部分组成.程序用来描述进程哪些功能以及如何完成:数据集是程序执行过程中所使用的资源:进程控制

进程线程协程

一.进程 各个进程拥有自己的代码段. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 二.线程 线程比进程轻量级,线程的切换cpu花费比进程小,线程能加大系统的并行度. 一个进程的各个线程之间是共享代码段的,各个线程都有一个程序计数器来指向下一条应该执行的指令. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 三.协程 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度.

进程,线程,协程的相关解释 《转载》

自己不太懂这一块,转发和大家一块分享!!! 进程,由OS来管理,每个进程都有自己独立的内存空间,进程之间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量,管道,事件等,任何一种方式的通讯效率都需要过内核,导致通讯效率比较低.由于是独立的内存空间,所以上下文切换的时候需要保存当先调用栈的信息,cpu各寄存器的信息,虚拟内存,以及打开的相关句柄等信息,所以导致上下文切换的代价非常高,因此进程并不适合大量创建. 线程:也是由OS来管理的,一个进程可以拥有多个线程,但是其中每个线程会共享父进

进程线程协程的区别

一.概念 1.进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信.由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈.寄存器.虚拟内存.文件句柄等)比较大,但相对比较稳定安全. 2.线程 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存

Python并发编程-进程 线程 协程

一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据集:数据集则是程序在执行过程中所需要使用的资源 3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感 知进程存在的唯一标志. 二.线程                                                                        

进程 线程 协程

进程可靠,开销大 线程共享内存,开销小 协程开销更小, python和go都有 apache是多进程,prework模式是一个进程处理一个请求 nginx也是多进程模式,一个master,多个woker,但是加入了异步非阻塞模式 mysql采用多线程,但是你ps看到的会有多个进程,是因为MySQL一直都是单进程.多线程的工作模式.只是,LinuxThreads并不是真正的线程,因此,这些进程其实还是采用系统调用 clone() 来共享同样的地址空间的.尽管采用 ps 查看的结果看起来是多进程,其

python 进程/线程/协程 测试

# Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/5/24 21:38 # 进程:如一个人拥有分身(分数数最好为cpu核心数)几乎同时进行做工# 线程:如这个人正在烧开水,但同时又可以在烧水时间内去吃饭,和扫地,这时线程就会对其随机选择,可能还会出现地还没扫完,水就开了,但他还会扫地{这就可能出现数据丢失}..# 协程:这个一个比线程更小的线程非常相似,但他在执行任务时,已经被规划好了,不会就行额外的时间浪费,创建时更省资源 im