01-进程与程序的概念
并发:多进程和多线程
进程的概念:进程就是正在执行的过程,一个应用程序不是进程,只有应用程序启动以后才能说是进程,进程是一个抽象的概念,起源于操作系统

02-操作系统介绍
应用程序的调用都是由操作系统实现的,操作系统会管理多个应用程序,具体执行程序是由硬件CPU管理的
多个应用程序启动会先给操作系统请求,由操作系统的算法判断硬件是否执行
操作系统的两个核心功能
1.封装好硬件的复杂接口,给应用程序调用
2.管理应用程序上的启动的多个进程(分配给CPU资源)

03-操作系统发展史-第一代计算机
【特点】
没有操作系统的概念
所有的程序设计都是直接操控硬件
【工作过程】
程序员在墙上的机时表预约一段时间,然后程序员拿着他的插件版到机房里,将自己的插件板接到计算机里,这几个小时内他独享整个计算机资源,后面的一批人都得等着(两万多个真空管经常会有被烧坏的情况出现)。
后来出现了穿孔卡片,可以将程序写在卡片上,然后读入机而不用插件板
【优点】
程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)
【缺点】
浪费计算机资源,一个时间段内只有一个人用。
注意:同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的

04-操作系统发展史-批处理系统
第二代计算机的批处理系统
第二代如何解决第一代的问题/缺点:
1.把一堆人的输入攒成一大波输入,
2.然后顺序计算(这是有问题的,但是第二代计算也没有解决)
3.把一堆人的输出攒成一大波输出
优点:
批处理,节省了机时
缺点:
1.整个流程需要人参与控制,将磁带搬来搬去(中间俩小人)
2.计算的过程仍然是顺序计算-》串行(仍然是一个一个执行的,把一堆程序的结果一起执行,最后全部执行完了以后输出)
3.程序员原来独享一段时间的计算机,现在必须被统一规划到一批作业中,等待结果和重新调试的过程都需要等同批次的其他程序都运作完才可以(这极大的影响了程序的开发效率,无法及时调试程序)

05-操作系统发展史-多道技术

第三代计算机(1965~1980):集成电路芯片和多道程序设计

如何解决第二代计算机的问题1:
卡片被拿到机房后能够很快的将作业从卡片读入磁盘,于是任何时刻当一个作业结束时,操作系统就能将一个作业从磁带读出,装进空出来的内存区域运行,这种技术叫做同时的外部设备联机操作:SPOOLING,该技术同时用于输出。当采用了这种技术后,就不在需要IBM1401机了,也不必将磁带搬来搬去了(中间俩小人不再需要)
如何解决第二代计算机的问题2:
第三代计算机的操作系统广泛应用了第二代计算机的操作系统没有的关键技术:多道技术
cpu在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,cpu需要等待,时间可能很短,但对于cpu来说已经很长很长,长到可以让cpu做很多其他的任务,如果我们让cpu在这段时间内切换到去做其他的任务,这样cpu不就充分利用了吗。这正是多道技术产生的技术背景
多道技术:
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于我们小学数学所学的统筹方法。(操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢cpu的执行权限。这种切换不仅会在一个进程遇到io时进行,一个进程占用cpu时间过长也会切换,或者说被操作系统夺走cpu的执行权限)
本质上CPU只能运行一个程序,但是不断切换的时候让人的感觉就是CPU在不断运行并发程序
串行:程序一个一个执行
并行:多个程序一起执行
空间上复用的最大问题:内存级别在物理层面上就要保证进程间的数据是互相独立的,第三代计算机仍然是批处理系统

06-操作系统发展史-分时操作系统
如何解决第二代计算机的问题3:
分时操作系统:多个联机终端+多道技术
20个客户端同时加载到内存,有17在思考,3个在运行,cpu就采用多道的方式处理内存中的这3个程序,由于客户提交的一般都是简短的指令而且很少有耗时长的,索引计算机能够为许多用户提供快速的交互式服务,所有的用户都以为自己独享了计算机资源
 

07-总结操作系统功能与多道技术
必备的理论基础:
一 操作系统的作用:
1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
二 多道技术:
1.产生背景:针对单核,实现并发
ps:
现在的主机一般是多核,那么每个核都会利用多道技术
有4个cpu【并行】,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
cpu中的任意一个,具体由操作系统调度算法决定。
2.空间上的复用:如内存中同时有多道程序
3.时间上的复用:复用一个cpu的时间片
强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,
这样才能保证下次切换回来时,能基于上次切走的位置继续运行

08-进程理论
什么是进程?
进程就是一个正在执行的过程或者是一个任务,而复杂执行的任务的是CPU
进程与程序的区别?
程序仅仅是一堆代码而已,而进程指的是程序的运行过程
强调:同一个程序执行两次,那也是两个进程。
并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发
并行:同时运行,只有具备多个cpu才能实现并行
进程的创建
  1. 系统初始化(查看进程linux中用ps命令,windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印)
  2. 一个进程在运行过程中开启了子进程(如nginx开启多进程,os.fork,subprocess.Popen等)
  3. 用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
  4. 一个批处理作业的初始化(只在大型机的批处理系统中应用)
【注意】Unix开子进程就是拷贝一份父进程的数据到子进程作为初始数据,windows开子进程也是拷贝一份父进程的数据,但是数据不是和父进程完全相同的数据
进程的状态
其实在两种情况下会导致一个进程在逻辑上不能运行,
  1. 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作
  2. 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。
进程的三个状态:
就绪状态: 当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态就称为就绪状态
执行状态:   进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。
阻塞状态:  正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
aaarticlea/png;base64,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" alt="" />

09-开启子进程的两种方式
方式一
# 开启子进程的目的是执行一个任务
# 方式一
from multiprocessing import Process
import time def task(name):
print('%s is running' % name)
time.sleep(4)
print('%s is done' % name)
# windows操作系统一定要在main下执行Process
if __name__ == '__main__':
p1 = Process(target=task, args=('panda',)) #实例化一个对象
p2 = Process(target=task, kwargs={'name':'boy'}) #实例化一个对象
p1.start() #仅仅是给操作系统发送了一个信号
p2.start()
print('主进程结束')

方式二

# 方式二
# 改写默认的一个类,提供功能
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self, name):
super().__init__()
self.name = name def run(self):
print('%s is running' % self.name)
time.sleep(4)
print('%s is done' % self.name)
if __name__ == '__main__':
p1 = MyProcess('panda')
p1.start()
print('主进程已经结束了')
10-查看进程的pid与ppid
操作系统对进程的管理也是需要编号的,这个编号就是进程的ID,简称为pid
import os
from multiprocessing import Process
import time def task():
print('%s is running' % os.getpid())
time.sleep(4)
print('%s is done' % os.getpid())
# windows操作系统一定要在main下执行Process
if __name__ == '__main__':
p1 = Process(target=task) #实例化一个对象
p2 = Process(target=task) #实例化一个对象
p1.start() #仅仅是给操作系统发送了一个信号
p2.start()
print('主进程结束',os.getpid())

输出结果

import os
from multiprocessing import Process
import time def task():
print('%s is running.Parent is is %s' % (os.getpid(),os.getppid()))
time.sleep(4)
print('%s is done.Parent is is %s' % (os.getpid(),os.getppid()))
# windows操作系统一定要在main下执行Process
if __name__ == '__main__':
p1 = Process(target=task) #实例化一个对象
p2 = Process(target=task) #实例化一个对象
p1.start() #仅仅是给操作系统发送了一个信号
p2.start()
print('主进程结束',os.getpid())

查看父进程(ppid)

输出结果

CMD命令查看应用程序的进程id
tasklist |findstr ProcessName

11-僵尸进程与孤儿进程

12-Process对象的其他属性或方法

13-练习题讲解

14-守护进程

15-互斥锁

16-模拟抢票

17-互斥锁与join的区别

18-队列的使用

19-生产者消费者模型

20-JoinableQueue的使用

21-什么是线程

22-开启线程的两种方式

23-进程与线程的区别

24-Thread对象的其他属性或方法

25-守护线程

26-互斥锁

27-GIL的基本概念

28-GIL与自定义互斥锁的区别

29-GIL与多线程

30-死锁与递归锁

31-信号量

32-Event事件

33-定时器

34-线程queue

35-多线程实现并发的套接字通信

36-进程池线程池

37-异步调用与回调机制

38-进程池线程池小练习

39-协程介绍

40-协程实现与总结

41-greenlet模块

42-gevent模块

43-gevent异步提交任务

44-基于gevent模块实现并发的套接字通信

45-IO模型介绍

46-阻塞IO模型

47-非阻塞IO模型

48-多路复用IO模型

49-异步IO模型

 

路飞学城Python-Day29(第四模块-并发编程)的更多相关文章

  1. 路飞学城Python-Day39(第四模块复习题)

    并发编程 一.简答题 1,简述计算机操作系统的中断的作用 由于cpu本身一次只能执行一个程序,操作系统提供的中断机制使得cpu能够实现不断的在各个程序间进行切换,给人的感觉就是多个程序同时执行 为什么 ...

  2. 路飞学城Python-Day40(第四模块复习题)

    数据库 一.简答题 1.说说你所知道的MySQL数据库存储引擎,InnoDB存储引擎和MyISM存储引擎的区别? 1.InnoDB存储引擎(MySQL默认存储引擎),支持事务,其设计目标主要面向联机事 ...

  3. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  4. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  5. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  8. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  9. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

随机推荐

  1. HAOI2006 受欢迎的牛 缩点

    不难分析出我们就是要求是否有唯一一个出度为0的强连通分量. Code: #include<cstdio> #include<stack> #include<algorit ...

  2. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  3. Vue学习之路第十九篇:按键修饰符的使用

    1.我们工作中经常会有类似于这样的需求:按下Enter键触发某个事件.或者按下ESC退出页面等各种各样的场景.在Vue中,可以通过键盘修饰符来实现这样的场景. 2.事例代码: <body> ...

  4. JavaScript进阶【一】JavaScript模块化开发的基础知识

    //模块化的最初写法 //1.最初写法 //下面的m1和m2就组成了一个模块 //缺点:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系. f ...

  5. HDU-6217 BBP Formula 脑洞

    题目链接:https://cn.vjudge.net/problem/HDU-6217 题意 已知: \[ \pi = \sum_{k=0}^{\infty }\frac{1}{16^{k}}(\fr ...

  6. ASP.NET MVC5 :Attribute路由使用详解

    1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attrib ...

  7. 用chrony代替ntpd时间同步服务器

    Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护进程,用于调整内核 ...

  8. CodeForcesGym 100676G Training Camp

    G. Training Camp Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...

  9. LightOJ1214 Large Division

    /* LightOJ1214 Large Division http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1 ...

  10. tx:advice标签简介

    http://book.51cto.com/art/200909/149437.htm