操作系统发展

穿孔卡片

  • 一个计算机机房, 一次只能被一个卡片使用

批处理

  • 将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行

  • 联机批处理系统: 在主机与输入机之间增加一个存储设备--磁带

  • 脱机批处理系统: 增加一台不与主机相连而专门用于与输入/输出设备打交道的卫星机

多道技术(单核)

  • 单道: 计算机内存中只运行一个程序
  • 多道: 计算机内存中穿插运行多个程序
    1. 当前执行程序遇到I/O操作, CPU会转而运行其他程序
    2. 当前程序占用CPU时间过长, CPU也会运行其他程序
    3. 优点: 提高CPU的利用率
    4. 缺点: 程序的执行效率降低

并发与并行

  • 并发: 在一个时间段内有多个程序在运行(分时交替)
  • 并行: 在一个时间点有多个程序在运行

进程

程序与进程

  • 程序: 有序的指令和数据的集合
  • 进程: 程序关于某个数据集合的一次运行活动, 是系统进行资源分配和调度的基本单位

进程调度

  • 先来先服务: 哪个进程先就绪就占用CPU, 进程阻塞或结束让出CPU
  • 短作业优先: 预计执行时间短的进程优先
  • 时间片轮转: 进程在就绪队列的等待时间与享受服务的时间成正比
  • 多级反馈队列: 设置多个就绪队列, 分布赋予不同的优先级

进程的三个状态

  • 就绪状态: 所有进程创建时都会进入就绪状态, 准备被调度
  • 运行状态: 进程被调度后就会获得CPU执行, 成为运行状态
  • 阻塞状态: 当进程遇到I/O操作时, 就会变为阻塞状态

同步和异步

  • 面向被调用者的消息通知机制

  • 同步: 被调用者得到结果再返回

  • 异步: 被调用方先返回, 再执行, 得到结果后再通知调用者

阻塞与非阻塞

  • 面向调用者的消息等待时的状态

  • 阻塞: 在调用结果返回前, 当前线程会被挂起等待, 知道拿到调用结果才会继续进行

  • 非阻塞: 在调用结果返回前, 可以继续进行其他操作

僵尸进程与孤儿进程

  • 僵尸进程: 指的是子进程已经结束, 但PID还在, 未被回收
  • 孤儿进程: 指的是子进程还在进行, 但父进程意外结束

守护进程

  • 指的是主进程结束后, 该主进程产生的所有子进程跟着结束并回收
from multiprocessing import Process
from multiprocessing import current_process
import time def task(name):
print(f'{name} started...', current_process().pid)
time.sleep(1)
print(f'{name} stopped...', current_process().pid) if __name__ == '__main__':
p = Process(target=task, args=('bigb',))
p.daemon = True
p.start()
print('主进程') # 主进程

Python中的进程操作

Process创建进程

from multiprocessing import Process
import time def task(name):
print(f'{name}的任务开始执行!')
time.sleep(1)
print(f'{name}的任务已经结束!') # 创建子进程时, 子进程会加载并执行父进程代码
if __name__ == '__main__':
# targent=执行函数的地址, args是该函数需要传入的参数
p = Process(target=task, args=('bigb',))
# 启动进程,并调用子进程中的p.run()
p.start()
print('主进程') '''
主进程
bigb的任务开始执行!
bigb的任务已经结束! '''
from multiprocessing import Process
import time class MyProcess(Process):
def run(self):
print('子进程任务开始执行!')
time.sleep(1)
print('子进程任务已经结束!') if __name__ == '__main__':
p = MyProcess()
# 启动进程,并调用子进程中的p.run()
p.start()
print('主进程') '''
主进程
子进程任务开始执行!
子进程任务已经结束!
'''
  • p.join()主进程等待子进程终止
from multiprocessing import Process
import time def task(name):
print(f'{name}的任务开始执行!')
time.sleep(1)
print(f'{name}的任务已经结束!') if __name__ == '__main__':
p = Process(target=task, args=('bigb',))
p.start()
p.join()
print('主进程') '''
bigb的任务开始执行!
bigb的任务已经结束!
主进程
'''
  • current_process().pid 获取子进程pid
  • os.getpid 获取主进程pid
  • tasklist | findstr pid cmd中查看pid属于哪个进程
  • p.is_alive() 判断p进程是否存活
  • p.terminate() 终止p进程

进程间数据相互隔离

from multiprocessing import Process

x = 1

def foo():
global x
x = 2 if __name__ == '__main__':
p = Process(target=foo)
p.start()
print(x) # 1

Python3 并发编程1的更多相关文章

  1. Python3 并发编程4

    目录 Event事件 线程池与进程池 基本概念 使用方法 和信号量的区别 协程(coroutine) 基本概念 实现方式 多线程爬取梨视频 Event事件 用来控制线程的执行 e.isSet()查看对 ...

  2. Python3 并发编程3

    目录 GIL全局解释器锁 基本概念 多线程的作用 死锁现象 递归锁 信号量 线程队列 GIL全局解释器锁 基本概念 global interpreter lock 全局解释器锁 GIL不是Python ...

  3. Python3 并发编程小练习

    实现基于TCP协议套接字,服务端实现接收客户端的连接并发 # server.py import socket from threading import Thread server = socket. ...

  4. Python3 并发编程2

    目录 进程互斥锁 基本概念 互斥锁的使用 IPC 基本概念 队列 生产者消费者模型 基本概念 代码实现 线程 基本概念 创建线程 线程互斥锁 进程互斥锁 基本概念 临界资源: 一次仅允许一个进程使用的 ...

  5. Python3 与 C# 并发编程之~ 进程篇

      上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...

  6. Python3 与 C# 并发编程之~ 协程篇

      3.协程篇¶ 去年微信公众号就陆陆续续发布了,我一直以为博客也汇总同步了,这几天有朋友说一直没找到,遂发现,的确是漏了,所以补上一篇 在线预览:https://github.lesschina.c ...

  7. Python3 与 C# 并发编程之~进程先导篇

      在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...

  8. Python3 与 C# 并发编程之~ 线程篇

      2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...

  9. asyncio:python3未来并发编程主流、充满野心的模块

    介绍 asyncio是Python在3.5中正式引入的标准库,这是Python未来的并发编程的主流,非常重要的一个模块.有一个web框架叫sanic,就是基于asyncio,语法和flask类似,使用 ...

随机推荐

  1. ubantu14.04安装storm伪分布式

    1.安装jdk 安装:sudo apt-get install openjdk-7-jdk 配置: 修改文件 sudo nano /etc/profile , 添加以下内容: 立即执行使之生效: 2. ...

  2. 修改 processor.php 文件,监听用户对该应用的消息

    修改 processor.php 文件,监听用户对该应用的消息 class cgc_fdModuleProcessor extends WeModuleProcessor { public funct ...

  3. nyoj 366-D的小L (next_permutation())

    366-D的小L 内存限制:64MB 时间限制:4000ms 特判: No 通过数:5 提交数:7 难度:2 题目描述:       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡 ...

  4. .Net Core 使用NPOI导入数据

    一.搭建环境 1.新建ASP.NET Core Web 应用程序 2.选择API 3.引用Swashbuckle.AspNetCore NuGet 包进行安装. Swashbuckle.AspNetC ...

  5. 机器学习 TensorFlow 实现智能鉴黄

    前言 最近在做一款图床服务,关注公号的小伙伴一定记得小柒曾说过,会在周末放出的,不好意思放大家鸽子了.之所以一直没敢放出,是因为鉴黄接口一直没调试好,虽然我对公号的小伙伴百分之百信任,奈何互联网鱼龙混 ...

  6. <meta name="viewport" content="width=device-width,initial-scale=1.0">的意思

    content属性值 :      width:可视区域的宽度,值可为数字或关键词device-width      height同理width      intial-scale:页面首次被显示是可 ...

  7. PostGIS 存储过程返回类型

    Postgresql存储过程返回值的方式有很多,在此先只记录一下自己用到过的,慢慢拓展 1.type型,这里geometry可以是任何postgresql支持的类型(integer/text/char ...

  8. Android 8.1 自定义热点的时候设置了热点maxLength="32",但是在希伯来语等状态下还是发现在没到32个字符之前就无法把热点设置成功了

    初步认为应该是与热点名称的字节数有关. 然后开始查看源码. /Settings/res/xml/tether_prefs.xml 中的 <Preference android:key=" ...

  9. 新闻实时分析系统 基于IDEA环境下的Spark2.X程序开发

    1.Windows开发环境配置与安装 下载IDEA并安装,可以百度一下免费文档. 2.IDEA Maven工程创建与配置 1)配置maven 2)新建Project项目 3)选择maven骨架 4)创 ...

  10. 自学python day 10 函数的动态参数、命名空间、作用域

    作业提升: s为字符串 s.isalnum() 所有字符都是字母或者数字 s.isalpha() 所有字符都是字母 s.isdigit() 所有字符否是数字 2. for i in range(1,1 ...