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

python进程/线程/协成相关推荐

  1. python进程线程协程区别_Python3多线程与协程

    python中的多线程非常的常用,之前一直糊里糊涂地使用,没有一些系统性的概念,记录一下~ 0x001 多线程的优势:可将长时间占用的程序放到后台 可能会加速程序执行速度 能够实现一些类似同步执行的效 ...

  2. python进程线程协程区别_进程和线程、协程的区别

    现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来.python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程.本文主要介绍进程.线程和协程三者之间的区 ...

  3. python 进程 线程 协程

    并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...

  4. python进程线程协程区别_Python中 进程 线程 协程

    一.进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在 ...

  5. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  6. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

  7. python/进程线程的总结

    python/进程线程的总结 一.进程和线程的描述:进程:最小的资源管理单位线程:最小的执行单位执行一个进程时就默认执行一个线程(主线程)进程和线程的工作方式:串行:假如共有A.B.C任务, 串行的执 ...

  8. Linux的进程/线程/协程系列4:进程知识深入总结:上篇

    Linux的进程/线程/协程系列4:进程/线程相关知识总结 前言 本篇摘要: 1. 进程基础知识 1.1 串行/并行与并发 1.2 临界资源与共享资源 1.3 同步/异步与互斥 1.4 进程控制原语 ...

  9. 简要说明__python3中的进程/线程/协程

    多任务可以充分利用系统资源,极大提升程序运行效率,多任务的实现往往与 多线程,多进程,多协程有关 稳定性: 进程 > 线程 > 协程 系统资源占用量:进程 > 线程 > 协程 ...

  10. linux的进程/线程/协程系列3:查看linux内核源码——vim+ctags/find+grep

    linux的进程/线程/协程系列3:查看linux内核源码--vim+ctags/find+grep 前言 摘要: 1. 下载linux内核源码 2. 打标签方法:vim+ctags 2.1 安装vi ...

最新文章

  1. 三年开发剑指阿里,复习耗时168天,三面阿里巴巴,成功定级P7
  2. java使用switch编月份和舱位,纠结,代码和书上的不对解决思路
  3. 人工智能技术在互联网医疗中的应用
  4. 连接蓝牙demo_【BTS001】开源蓝牙协议栈BTStack初体验
  5. vs2015运行项目时出现“编译器失败,错误代码为 1”的解决方案
  6. 让nginx支持php
  7. CheckBoxList 只能选2个选项
  8. PHP.ini文件 服务器将用户可操作的文件限制在某目录下
  9. javascript中文乱码问题分析及解决方案
  10. python脚本编程基础读后感_Python入门经典的读后感10篇
  11. 肠道重要菌属——另枝菌属(Alistipes),调节炎症情绪等的潜力菌
  12. python keyboard hook_[python] PyMouse、PyKeyboard用python操作鼠标和键盘
  13. 解决不支持S/W HEVC(H265)解码/找不到FFmpeg64.dll
  14. .NET Reflector 7.6.1.824安装及破解(刚试了,绝对能用)
  15. android 生成aar文件,Android 中.aar文件生成方法与用法
  16. 腾讯T3亲自讲解!2021年最新Android面试点梳理,附带学习经验
  17. python微信公众号翻译功能_使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译...
  18. 有了这 15 款编程游戏,谁都可以学编程!
  19. 全球与中国网络性能监控工具市场现状及未来发展趋势
  20. 让DIV子元素超出部分隐藏

热门文章

  1. 大中型 UGC 平台的反垃圾(anti-spam)工作
  2. appcan使用心得体会
  3. 安卓app里播放youtube视频
  4. linux系统取消自检,Linux 磁盘自检设置
  5. 指针式仪表自动识别和读数
  6. __wakeup()绕过
  7. CleanMyMac X4.12.2免费版MAC电脑系统磁盘优化工具
  8. 听说QQ扫码登录很难,办了它
  9. 事件查看器mysql_Windows 事件查看器(Event Viewer) 检查日志的方法
  10. 图解网络(一)——计算机网络基础