并发编程

操作系统发展史

  • 穿孔卡片

    • 读取数据速度特别慢,CPU利用率极低
    • 单用户使用
  • 批处理
    • 读取数据速度特别慢,CPU利用率极低
    • 联机使用
  • 脱机批处理(现代操作系统的设计原理)
    • 读取数据速度提高
    • CPU的利用率提高

多道技术(基于单核背景下产生的)

  • 单道(串行):一个任务完完整整地运行完毕后,才能运行下一个任务
  • 多道技术:允许多个程序同时进入内存并运行。同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。

多道技术的实现是为了解决多个程序竞争或者说共享同一个资源的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

  • 空间上的复用:多个程序使用一个CPU(多个进程复用内存空间)

  • 时间上的复用:多个进程复用CPU的时间

    • 当执行程序遇到IO时,操作系统会将CPU的执行权限剥夺

      优点:CPU的执行效率提高

    • 当执行程序执行时间过长时,操作系统会将CPU的执行权限剥夺

      缺点:程序的执行效率低

并发与并行

  • 并发:是伪并行,即看起来是同时运行。单个CPU+多道技术就可以实现并发
  • 并行:同时运行,只有具备多个CPU才能实现并行

无论是并行还是并发,在用户看来都是“同时”运行的。不管是进程还是线程,都只是一个任务而已,真正工作的只有CPU。一个CPU同一时刻只能执行一个任务。

程序、进程和线程

程序:一系列代码文件组成

进程:一个正在运行的程序的一个实例。包括程序代码和当前的活动

线程:CPU可使用的最基本单元。 也成为轻量级进程。线程是进程中的一个实体。 线程是进程中的指令序列,其行为类似于进程。不同于进程是因为它没有自己的程序控制块

ps:通常,在进程中创建多线程。线程在进程内执行,进程在操作系统内核中执行

进程的三种状态

就绪态:具备运行的所有条件,逻辑上可以运行,等待CPU处理

等待(阻塞)态:等待某一事件

运行态:正在占用处理器运行

进程调度

  • 先来先服务调度算法。缺点:执行效率低
  • 短作业优先调度算法,执行时间越短,则优先调度。缺点:导致执行时间长的程序,需要等待所有时间短的程序执行完毕后,才能执行
  • 时间片轮转法
  • 多级反馈队列

同步与异步

同步:?

异步:?

阻塞与非阻塞

阻塞:凡是遇到IO都会阻塞

非阻塞:除了IO都是非阻塞

python基础-并发编程part01的更多相关文章

  1. python基础-并发编程02

    并发编程 子进程回收的两种方式 join()让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源 from multiprocessing import Process import ti ...

  2. python基础-网络编程part01

    软件开发架构 C/S(Client / Server) 架构 概念:是一种软件系统体系结构.Client是客户端,Server是服务端.客户端需要安装专用的客户端软件. 比如:微信.QQ.王者荣耀等应 ...

  3. python基础-函数式编程

    python基础-函数式编程  高阶函数:map , reduce ,filter,sorted 匿名函数:  lambda  1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层 ...

  4. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  5. Python 3 并发编程多进程之进程同步(锁)

    Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...

  6. Python 3 并发编程多进程之守护进程

    Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...

  7. Python 3 并发编程多进程之队列(推荐使用)

    Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往 ...

  8. python 基础网络编程2

    python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...

  9. python 基础网络编程1

    python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...

随机推荐

  1. 亡命之徒aaaaaa.......chao

    前端是一个看似入门门槛不高,但要学好很难的领域.前端的知识体系庞杂又松散,技术演进快,如果摸不清脉络的话很容易陷入盲人摸象的困境甚至跑偏.其实只要掌握了正确的方法,学习前端和学好前端就只是个时间问题. ...

  2. 分段二次插值——用Python进行数值计算

    事实上在实际使用中,高次插值显然是很不适合的,高次插值将所有样点包涵进一个插值函数中,这是次幂高的原因.高次计算复杂,而且刚开始的一点误差会被方的很大.因此将整个区间分为若干个小区间,在每一个小区间进 ...

  3. String类常用方法小节

    (1)String.equals() 返回值是boolean类型 equals(Object anObject)           将此字符串与指定的对象比较. (2)length() 返回值是in ...

  4. javascript通过时区获取时间

    /* 描述:时区的换算 参数:offset时区位置 使用:东八区calcTime(”+8"); */ function calcTime(offset) { // 创建一个本地日期 var ...

  5. 摘自:java夜未眠之java学习之道

    目前Java可以说是产业界和学术界最热门的语言,许多读者都很急切想把Java学好.除非是武侠小说中的运功传送内力的方式,否则花上一段时间苦学是免不了的.花时间,不打紧,就是怕方法错误,事倍功半.我认为 ...

  6. 她让我懂得了怎样学习Flash

    原文:http://www.asv5.cn/blog/article.asp?id=169 最近忙着寻找两样丢失了很久的东西,都是她帮我找回来的,第一样叫做自信,第二样叫做梦想.也正因为有了她,我才从 ...

  7. Hadoop 相关链接

    Apache   软件下载 http://mirror.bit.edu.cn/apache/ 相关文档链接: Apache Hadoop 2.5.2  http://hadoop.apache.org ...

  8. 异步tcp通信——APM.ConsoleDemo

    APM测试 俗话说麻雀虽小,五脏俱全.apm虽然简单,但是可以实现单机高性能消息推送(可以采用redis.kafka等改造成大型分布式消息推送服务器). 测试demo: using System; u ...

  9. log4j打印出线程号和方法名

    先参考实现配置,如果想要更加详细的配置,可加上更多参数: log4j.rootLogger = INFO,FILE,CONSOLE log4j.appender.FILE.Threshold=INFO ...

  10. 【转】python qt(pyqt)的文件打开、文件保存、文件夹选择对话框

    import PyQt4.QtCore,PyQt4.QtGui # 获取文件路径对话框 file_name = QFileDialog.getOpenFileName(self,"open ...