进程


一、UDP协议

# UDP协议与TCP协议的写法差不多

# 服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
msg, address = server.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)
server.sendto('我是服务端 你好啊'.encode('utf8'), address)


# 客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1', 8080)
client.sendto('我是客户端 想我了没'.encode('utf8'), server_address)
msg, address = client.recvfrom(1024)
print('msg>>>:%s' % msg.decode('utf8'))
print('address>>>:',address)

# 服务端不用考虑客服端异常退出问题
# UDP不存在粘包问题(udp大部分用于短信息通讯)

二、操作系统的发展史

'''
三大核心硬件:
    
cpu:cpu是计算中唯一干活的人
内存:给cpu准备运行的代码
硬盘:永久保存可能要被运行的代码
强调:CPU是整个计算机执行效率的核心
'''

1.穿孔卡片

是早期程序员在使用计算机运行代码的时候最麻烦的一个时代,此时还没有操作系统的概念

 

 

程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;

计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。

手工操作方式两个特点:
  1.用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。
  2.CPU 等待手工操作。CPU的利用不充分。

 2.联机批处理系统

    一次性可以录入多个用户指令、 缩短了cpu等待的时间, 提高了cpu的利用率

 

 3.脱机批处理系统

  是现代计算机的雏形>>>提高了CPU的利用率

 

 三、多道技术

"""  多道技术的前提是计算机上只有一个CPU      """

所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,
它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。

1.单道技术

  就是所有程序排队执行 cpu执行完一个程序下一个程序才能执行 总耗时是所有程序执行时间之和 效率太慢了

 

 2.多道技术

  就是计算机利用空闲时间提前准备好一些数据 提高效率 总耗时较短

空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序

空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存,

首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。

其次丧失的是稳定性,某个程序崩溃时有可能把别的程序的内存也给回收了,比方说把操作系统的内存给回收了,则操作系统崩溃。

# 多道技术的特点:
1、空间上的复用
    多个任务共用一套计算机硬件
  2、时间上的复用
    切换 + 保存状态
# 切换加保存状态
   1. CPU会在两种情况下会被切换(去执行其他程序)
        1.程序执行IO操作
            IO操作有:
                input操作
                time.sleep()
                文件打开
                文件保存
                ...
         2.程序长时间占用内存
    2.保存状态
        就是CPU在切换出去前记录了当前执行状态 之后切回来的时候基于该状态往后执行

四、进程

如何理解进程
    程序:其实就是一堆死的代码
    进程:就是就是正在被运行中的代码

1.进程的调度算法

  就是如何利用CPU让程序有效的执行

1.1先来先到算法

  就是先来的程序先执行后来的在后面排队

  但是这样的话对耗时短的程序来说不友好 

  因为如果第一个来的程序执行时间是一天或更久

  而后面来的程序执行时间有可能只有1s或更短 按照先来先到算法还是先执行第一个

  那么后面的程序就要等很久很久这样效率太慢了

1.2短作业优先调度

  就是让执行出现短的先执行这样的话对长时间作业的不友好

  如果现在有很多个1S或更短的执行时间程序和有一个20小时的执行时间程序

  那么会先执行短时间的 那么20小时有可能永远的执行不到

1.3时间片轮转法+多级反馈队列

  时间轮转法:其实就是把固定的时间平均分成很多份  所有的程序来的都会拿到一份

  分配多次后还有程序执行那么 就会让这个程序进入到下一层

  越往下一层总耗时时间越长 分配到的时间就越多 但是优先级就越低

 

 五、进程的并行和并发

# 并行
    就是多个进程同时执行
    一个CPU是肯定执行不了的  必须要有多个CPU 因为一个进程就要一个CPU

# 并发
    就是多个进程看上去像同时执行就是并发
    单个CPU就可以实现并发 如果是并行那么肯定也属于并发
'''
这个过程就是让CPU在对多个程序之间利用多道技术来回切换+保存状态
  单核能够实现并发, 但是不能实现并行
'''
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session


描述一个网址非常牛逼能够同时服务很多人的话术
    1.我这个网站很牛逼 能够支持14亿并行量(高并行)
        不合理 哪有那么多CPU(集群也不现实)
    2.我这个网站很牛逼 能够支持14亿并发量(高并发) 
        非常合理!!!  国内最牛逼的网站>>>:12306

六、进程的多种状态

进程三状态图
    就绪态: 程序在运行态之前肯定要处于就绪态
    运行态: 程度被CPU执行着
    阻塞态: 程序执行过程中有IO操作
  """
    如果想要提高程序被执行效率
       就要程序一直处于就绪态和运行态
  """

 

 

1.所有的进程想要被运行 那么必须先经过就绪态 等待进程调度

2.运行过程中如果进入IO操作 那么就会进入到阻塞态

3.运行过程中如果时间片用完就会就如就绪态 等待进程调度

4.阻塞态如果想要进入运行态必须先进入就绪态 等待进程调度

七、同步用于异步

# 用于描述任务的提交状态

# 同步
    同步其实就是 提交完任务之后原地等待结果 期间不做任何事情

# 异步
    异步就是 提交完任务之后不会原地等待 期间想做什么事就做什么事 结果会自动提醒

八、阻塞与非阻塞

# 用于描述进程的执行状态

# 阻塞
    阻塞态

# 非阻塞
    就绪态、运行态

九、同步异步与阻塞非阻塞

# 有四种组合结果


1.同步阻塞:可以看成是一个人在银行排队 并且在队伍中什么都不做就干等着
2.同步非阻塞:可以看成是一个人在银行排队 并且在队伍中做着其他事情
3.异步阻塞:可以看成是这个人取号了 然后在椅子上做着 但是什么都不做
4.异步非阻塞:可以看成是这个人取号了 然后在椅子上 做着其他事情 等到了在过去办理业务  (这个过程其实已经就是把程序运行到了极致)

 

 

 

 

posted @ 2022-08-08 15:57  stephen_hao  阅读(217)  评论(0编辑  收藏  举报