UDP协议和进程

UDP协议和进程

UDP协议(了解)


称之为是数据包协议

特点:

1,不需要建立链接

2,不需要知道对方是否接收到

3,数据不安全

4,数据传输快

5,能支持并发

6,不会粘包

7,无需先启动服务端在启动客户端


优点:

  • 传输速度快

  • 能支持并发

  • 不会粘包

 

缺点:

  • 数据不安全,容易丢失


import socket

client = socket.socket(type=socket.SOCK_DGRAM)

address = ('127.0.0.1', 9002)

while True:
   msg = input('Client---> Server:').encode('utf-8')

   client.sendto(msg, address)

   
   import socket


# socket.SOCK_DGRAM--->UPD协议

server = socket.socket(type=socket.SOCK_DGRAM)
# 服务端需要绑定一个地址,让别人知道你在哪
server.bind(
  ('127.0.0.1', 9002)
)
while True:

   # 发送数据给服务端的用户地址
   data, addr = server.recvfrom(1024)

   print(addr)
   print(data)

 

 

TCP协议(称之为流式协议)


优点:

数据安全

缺点:

传输速度慢

粘包


面试:TCP和UDP的区别,简述优缺点即可。*

 

 

并发编程

1)操作系统发展史

  • 1.1 穿孔卡片

     

    • 读取数据速度特别慢

    • CPU的李永率极低

    • 单用户(一份代码)使用

       

  • 1.2 批量处理

    • 读取速度特别慢

    • CPU的利用率特别低

    • 联机(多份代码)使用

    • 效率还是很低

  • 1.3 脱机批处理

    • 读取数据速度提高

    • CPU的利用率速度提高

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


单道:一条路走到黑---》串行

比如:a,b需要使用CPU, a先使用,b等待a使用完毕后,b才能使用CPU

 

多道(重要)

比如:a,b需要使用CPU,a先使用,b等待a,直到a进入“IO或执行时间过长”

a会(切换+保存状态), 然后b可以使用cpu,待b执行遇到“IO或执行时间过长”

再将CPU执行权限交给a,直到两个进程结束。

 

空间上的复用(重要):

多个程序使用一个cpu

时间上的复用(重要):

切换 + 保存状态


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

优点:

cpu的执行效率提高

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

缺点:

程序的执行效率低

 

并发与并行


并发:

在单核(一个cpu)情况下,当执行两个a,b程序时,a先执行, 当a遇到IO时, b开始执行争抢cpu的执行权限,再让b执行,他们看起像同时运行。

 

并行:在多核(多个cpu)的情况下, 当执行两个a, b程序时,a与b同时执行,他们是真正意义上的同时运行。

 

面试题:在单核情况下能否实现并行? 不行

 


进程

什么是进程?

进程是一个资源单位

进程与程序:

程序:是一堆代码文件。

进程:执行代码的过程,称之为进程。


 

进程调度:(了解)

先来先服务调度算法(了解)

比如程序 a, b,若a先来, 则让a先服务, 待a服务完毕后, b再服务

缺点:执行效率低

短作业优先调度算法(了解)

 

执行时间越短,则先先调度。

缺点: 导致执行时间长的程序,需要等待所有时间短的程序执行完毕后,才能执行。

现代操作系统的进程调度算法: 时间片轮转法 + 多级反馈队列 (知道)


 

时间片轮转法

比如同时有10个程序需要执行,操作系统会给你10秒,然后时间片轮转法会将10秒分成10等分。

多级反馈队列:

1级队列: 优先级最高,先执行次队列中程序。

2级队列: 优先级以此类推 3级队列:


同步与异步

同步与异步指的是“提交任务的方式”

同步(串行):

两个a,b程序都要提交并执行,假如a先提交执行,b必须等a执行完毕后,才能提交任务。

异步(并发):

两个a,b程序都要提交并执行,假如a先提交并执行,b无需等a执行完毕,就可以直接提交任务。


阻塞与非阻塞:

  • 阻塞(等待):

    凡是遇到IO都会阻塞。

    IO:

    input()

    output()

    time.sleep(3)

    文件的读写

    数据的传输

    -非阻塞 (不等待) :

    除了IO都是非阻塞

    (比如: 从1+1开始计算到100万)

    就是计算量比较大


    进程的三种状态:就绪态:同步与异步

     

    运行态:程序的执行时间过长---》将程序返回给就绪态

     

    阻塞态:遇到IO

     

    面试题:阻塞与同步是一样的吗?非阻塞与异步是一样的吗?

    同步与异步: 提交任务的方式

    阻塞与非阻塞: 进程的状态。

    异步非阻塞: ----> cpu的利用率最大化!


     

    创建进程的两种方式:

    # 方式一:
    from multiprocessing import Process
    # import time
    #
    # def tack(name): # 任务
    #     print(f'start...{name}的子进程')
    #     time.sleep(3)
    #     print(f'end...{name}的子进程')
    #
    # if __name__ == '__main__':

       # target = 任务(函数地址)--》创建一个子进程
       # p_obj1 = Process(target=tack, args=('wanglu', ))
       #
       #
       # p_obj1.start()# 告诉操作系统,去创建一个子进程
       # p_obj1.join() # 告诉主进程,等子进程结束后,再结束
       #
       # print('正在执行当前主进程...')
       #
       # list1 = []
       # for line in range(10):
       #     p_obj = Process(target=tack, args=('wanglu', ))
       #     p_obj.start()
       #     list1.append(p_obj)
       #
       # for obj in list1:
       #     obj.join()
       #
       # print('谢幕。。。')



    # 方式二:
    from multiprocessing import Process
    import time



    class MyProcess(Process):
       def run(self):
           print(f'start...{self.name}的子进程')
           time.sleep(3)
           print(f'end...{self.name}的子进程')


    if __name__ == '__main__':
       list1 = []

       for i in range(10):
           obj = MyProcess()
           obj.start()
           list1.append(obj)

       for obj in list1:
           obj.join()

       print('谢幕。。。')

     

     

  •  

 

猜你喜欢

转载自www.cnblogs.com/zhangjinyi97/p/11997226.html