并发编程

操作系统发展史

  • 穿孔卡片

    • 读取数据速度特别慢,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. 在windows主机中,利用XSHELL生成“密钥”进行虚拟机与物理机的传输

    首先你要有虚拟机,其次你要可以互相ping通(主机与虚拟机) 接着你要有xshell 软件  没有的话可以点击链接下载 Xshell  6  提取码:cj5t 打开Xshell软件  在工具栏中选择“ ...

  2. Everything 信息泄露

    google语法: inurl:Diagnostics/index 这个无意间看到别人找到的,其实是everything自带的http服务器功能开启了忘记关,算是管理员自己的疏忽 可以看到开了ever ...

  3. 学习笔记53_C#操作MongoDB

    1.配置MongoDB的连接字符串 MongoDB程序集引用 在使用db.GetCollerction<T>,也可以不指定类,因为Mongodb是无模式的. ****关系型数据设计转化为j ...

  4. [wcp部署]Linux(Ubuntu)安装部署WCP

    1.安装JAVA运行环境 配置环境变量及安装jdk mkdir /usr/local/java tar -zxvf jdk-8u31-linux-x64.gz #解压jdk包 mv jdk1.8.0_ ...

  5. [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...

  6. servlet三大组件

    servlet大致可以分为三个:简单servlet.过滤servlet.监听servlet servlet: servlet的创建 创建一个类并实现Servlet接口. 重写service方法. 在服 ...

  7. python快速获取网页标准表格内容

    from html_table_parser import HTMLTableParser def tableParse(value): p = HTMLTableParser() p.feed(va ...

  8. nyoj 4 ASCII码排序

    ASCII码排序 时间限制:3000 ms  |  内存限制:65535 KB | 难度:2   描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一 ...

  9. nyoj 1022 合纵连横 (并查集<节点删除>)

    合纵连横 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 乱世天下,诸侯割据.每个诸侯王都有一片自己的领土.但是不是所有的诸侯王都是安分守己的,实力强大的诸侯国会设法 ...

  10. nyoj 168-房间安排 (贪心)

    168-房间安排 内存限制:64MB 时间限制:3000ms 特判: No 通过数:33 提交数:71 难度:2 题目描述: 2010年上海世界博览会(Expo2010),是第41届世界博览会.于20 ...