python进程/线程/协成

1.谈谈对多进程多线程以及协成的理解    进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫做程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大    线程:调度执行的最小单位,也叫执行路径,不能独立存在,必须依赖进程存在,一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率.    协成:是一种用户太的轻量级线程,协成的调度完全由用户控制,协成拥有自己的寄存器上下文和栈.协成调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快2.什么是多线程竞争?    线程是独立的,同一进程里数据共享的,当各个线程访问数据资源时会出现竞争状态即:数据几乎被多个线程占用,造成数据混乱,即所谓线程不安全    如何解决多线程竞争问题?锁        锁的好处?            确保了某段关键代码(共享数据资源)只能由一个线程从头到        尾完整弟执行能够解决多线程资源竞争下的原子操作问题        锁的坏处?            阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程        模式执行,效率就大大地下降了3.什么是锁?有哪几种锁?    锁(Lock)是python提供的队线程控制的对象,    互斥锁    可重入锁    死锁4.什么是死锁?    若干子线程在资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿意先解锁,互相干等着,程序无法执行下去,这就是死锁5.GIL锁,全局解释器锁(只有cpython里才有)    作用:限制多线程同时执行,保证同一时间只有一个线程执行,所有cpython里的多线程其实是伪多线程    所以python里常常使用协成技术来代替多线程,协成是一种更轻量级的线程    进程和线程的切换时由系统决定的,而协成由我们程序员自己决定,而模块gevent下切换时遇到了消耗操作才会切换    三者的关系:进程里有线程,线程里有协成6.什么是线程安全?什么是互斥锁?    每个对象有对应一个可称为"互斥锁"的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象.    同一个进程中多线程是共享系统资源的,多个线程同时对一个对象进行操作,一个线程操作尚未结束,另一个线程已经对其进行操作,导致最终结果出现错误,此时需要对呗操作对象添加互斥锁,保证每个线程对该对象的操作都得到正确的结果7.说说下面几个概念?同步,异步,非阻塞?    同步:多个任务之间有先后顺序,一个执行完下一个才能执行    异步:多个任务之间没有先后顺序,可以同时执行,有时候一个任务可以在必要的时候后去另一个同时执行的任务的结果,这就叫回调?    阻塞:如果卡主了调用者,调用者就不能继续往下执行,就是说调用者阻塞了    非阻塞:如果不会卡主,可以继续执行,就是说非阻塞的    同步异步相对于多任务而言,阻塞非阻塞相对于代码而言8.什么是讲师进程和孤儿进程?怎么避免僵尸进程?    孤儿进程:父进程退出,子进程还在运行的这些子进程都是孤儿进程孤儿进程将被init进程(进程号为1)所收养,并由init进程对他们完成状态收集工作    僵尸进程:进程使用fork创建子进程, 如果子进程退出, 而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中的这些进程是僵尸进程    避免僵尸进程的方法:         1. fork 两次用孙子进程去完成子进程的任务;         2. 用wait()函数使父进程阻塞         3. 使用信号量, 在signal handler 中调用waitpid, 这样父进程不用阻塞.9.python中的进程与线程的使用场景?    多进程适合在cpu密集型操作(cpu指令比较多,如位数多的浮点运算)    多线程使用在IO密集型从操作(读写数据操作教多的,比如爬虫)10.线程是并发还是并行?进程是并发还是并行?    线程是并发,进程是并行    进程之间相互独立,是系统分配资源的最小单位,同一进程中所有线程共享资源11.并行和并发?    并行:同一时刻多个任务同时运行    并发:同一时间间隔内多个任务都在运行,但是并不会再同意时刻    同时运行,存在交替执行的情况        实现并行的库有:multiprocessing        实现并发的库有:threading        程序需要执行较多的读写,请求和回复任务的需要大量的IO操作,    IO密集型操作使用并发更好        CPU运算量大的程序,使用并行会更好12.IO密集型和CPU密集型的区别?    IO密集型:系统运作,大部分情况是CPU在对I/O(硬盘/内存)的读/写    CPU密集型:大部分时间用来做计算,逻辑判断等CPU动作的程序称为CPU密集型    

原文地址:https://www.cnblogs.com/zhaoyang110/p/11355645.html

时间: 2024-10-11 21:30:58

python进程/线程/协成的相关文章

python基础26 -----python进程及协成

一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程 该进程可以运行在Python程序内部编写的函数,属于父进程和子进程的关系.该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法. 1.2Process类的简绍 构造方法: Process([gro

python 进程 线程 协程

并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的利用CPU资源使到并发成为可能.进程由操作系统调度. 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能.线程共享进程的大部分资源,并参与CPU的调度, 当然线程自己也是拥有自己的资源的,例如,栈,寄存器等等.线程由操作系统调度. 协程通

python 进程/线程/协程 测试

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

python进程|线程|协程

进程(Process) 1)进程就是正在运行的程序,它是操作系统中,资源分配的最小单位 (1)资源分配:分配的是cpu和内存等物理资源 (2)进程号是进程的唯一标识 2)同一个程序执行两次之后是两个进程 3)进程和进程之间的关系: 数据彼此隔离,通过socket通信 获取进程id import os res = os.getpid() # 获取当前进行id (当前子进程) print(res) res = os.getppid() # 获取父进程id print(res) # result "&

# 进程/线程/协程 # 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.什么是进程?进程和程序之间有什么

线程、进程和协成对比

讲述线程.进程和协成? 1)为什么引入: 操作系统可以同时运行多个任务,引入了线程,进程和协成 2)定义: 线程: 可以理解成执行代码的分支,线程是执行对应的代码的,cpu会调度对应的线程去工作,也可以说线程是cpu调度的基本单位(工作原理) 进程: 通俗理解一个运行起来的程序或者软件叫做进程 如何理解进程:把进程想成现实生活中的公司,公司可以给员工提供办公资源(办公桌椅,办公电脑等资源), 真正干活的是员工,所以员工可以想成线程,公司就是进程 协成:又称为微线程,也称为用户级线程,在不开辟线程

python/进程线程的总结

python/进程线程的总结 一.进程和线程的描述: 进程:最小的资源管理单位 线程:最小的执行单位 执行一个进程时就默认执行一个线程(主线程) 进程和线程的工作方式: 串行: 假如共有A.B.C任务, 串行的执行流程是第一个执行A任务,A任务执行完毕后再执行B任务,B任务执行完毕后最后执行C任务. 并发: 假如共有A.B.C任务,并行的执行流程是执行A任务一段时间,切换成B任务执行一段时间,在切换到C任务,直到A.B.C三个任务都执行完毕. 并行: 假如共有A.B.C任务,并发的执行流程是同一

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

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

走入计算机的第三十八天(python的进程和协成))

一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程 该进程可以运行在Python程序内部编写的函数,属于父进程和子进程的关系.该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法. 1.2Process类的简绍 构造方法: Process([gro