day38 Pyhton 并发编程

# 网络编程
# arp协议 :
    # 1.这是一个通过ip找mac地址的协议
    # 2.由于有了socket,用户在使用网络的时候,只需要关心对方用户的ip地址就可以了
    # 3.如果用户即将和这个ip进行通信,那么还需要知道它的mac地址
    # 4.这个时候就需要由你的机器发起一个arp请求
    # 5.由交换机进行广播
    # 6.对应的机器会回应这个arp请求
    # 7.通过交换机单播发给你的机器

# tcp协议和udp协议的特点?
    # 1.tcp
        # 面向连接的可靠的流式传输 适合传输比较大的文件,
        # 对稳定性要求比较高的
        # 扩展的说 为什么 可靠?
    # 2.udp
        # 无连接的 快速 但不可靠
        # 适合传输对效率要求比较高的短消息

# 你了解4层交换机么?
    # 了解,4层就是osi协议中的第4层,传输层
    # 这一层封装的是端口的信息和tcp协议以及udp协议
    # 所以4层交换机就是可以直接识别传输层协议和端口信息的机器
    # 能够实现信息输出直接到端口

# 笔试题
# osi五层协议
# 应用层     http https ftp smtp
# socket
# 传输层     tcp/udp协议   端口        4层交换机\4层路由器
# 网络层     ipv4/ipv6协议  ip        路由器\三层交换机
# 数据链路层  arp协议       mac地址    网卡\交换机
# 物理层                             网线

# 以下哪些协议不属于数据链路层?
# 以下哪些硬件设备是属于网络层的?

# socket
# 什么是socket?
    # 网络协议的大接口,帮助我们完成网络传输过程中的osi4层以及一下信息的封装
# tcp协议 : 要先建立连接 占线 用socketserver解决
# udp协议: 不需要建立连接 且可同时和多个客户端进行交互

# socketserver 实现了并发的socket tcp server

# 黏包现象 :
    # 黏包现象怎么产生的
    # 首先,我们发出的信息不是立即通过网络传送到另一端
    # 而是我们发到操作系统的缓存中,
    # tcp协议首先流式传输无边界,第二是可靠所以每一条数据都有回执
    # 那么为了节省网络上延迟的时间
    # 连续发送出的多个短信息就会黏在一起
    # 由发送端的缓存发送除去,所以接收到的就是黏在一起的数据了

    # 发送端发送的消息也不是直接发送到对面的应用中
    # 而是发到了对方操作系统的缓存中
    # 如果连续发送的数据在对方的缓存中没有被及时取走
    # 那么也会发生黏包现象

# 如何解决黏包
    # 自定义协议
    # 先发送即将发送数据的长度,然后再发送数据
    # 先接收数据的长度,再根据接收的长度接收数据
    # 用到了struct模块,来控制第一次发送数据长度的这条信息的长度

# ftp
    # 功能复杂
    # 是一个相对完善的大功能
# 并发编程 6-7day
# 操作系统基础理论 初识进程 day1
# 进程 day2 day3
# 线程 day4 day5
# 协程 day6 + 拓展的知识点
# IO模型(待定)

# 操作系统的基础
# 操作系统的进化论
# 认识进程的概念
    # 进程的状态
    # 什么是并行什么是并发
    # 阻塞和非阻塞的概念
    # 同步和异步的概念
# 初识python中的进程
# 什么是io操作
# i input  输入 相对内存 进入内存
    # read
    # recv
    # input 人脑子里的内容直接通过键盘输入到内存中
    # load
# o output 输出 相对内存 从内存出去
    # write
    # send
    # dump


# 文件操作就是io
# 网络操作就是io

# 文件在硬盘上   程序在运行的时候 是在内存中存储数据
# 如果文件中的内容 -输入的过程-> 内存中
# str -输出的过程-> 写到文件中

# 网络操作
    #send 输出
    #recv 输入

# 多道操作系统
    # 提高了cpu的利用率
    # 第一次出现了一个概念 : 任务状态的保存
    #   数据隔离的概念(由于同时在执行的多个程序之间的数据不能混为一谈)

# 单处理机系统中多道程序运行时的特点:
# (1)多道:计算机内存中同时存放几道相互独立的程序;
# (2)宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕;
# (3)微观上串行:实际上,各道程序轮流地用CPU,并交替运行。

# 计算机 - 多道操作系统
# 研究生 : 5分钟 并且没有IO
# 老教授 : 24h  并且没有IO

# 时间短的走 : 短作业优先算法


# 分时操作系统  把时间分成片

# 实时操作系统

# 大型的任务 高并发
# 分布式系统 帮助你分发任务 拆解任务
# celery - 分布式

# 所有的程序  - 任务
# 所有对任务 - 进程
# 什么是进程 ? 进行中的程序
# 进程 :
    # 是计算机中资源分配的最小单位
    # 并且 进程与进程之间的数据是隔离的

# 进程的三状态图
# 就绪 阻塞 运行

# 同步
    # 有几件事情 先做一件,做完一件再做一件
# 异步
    # 有几件事情 同时完成
# 阻塞 blocking
    # input
    # accept
    # recv
    # sleep
    # recvfrom
# 非阻塞 所有不阻塞的程序
# import socket
# sk = socket.socket()
# sk.setblocking(False)
# sk.bind(('127.0.0.1',9000))
# sk.listen()
# while True:
    # try:
    #     conn,addr = sk.accept()
    #     break
    # except BlockingIOError:
    #     print('没人连我')
# conn.recv

# 四个词不是一回事儿
# 同步和异步是一对反义词
# 阻塞和非阻塞是一对反义词
# 同步阻塞
    # 一件事儿一件事儿的做
    # 中间还要被阻塞
# 同步非阻塞  : 费力不讨好
    # 一件事儿一件事儿的做
    # 但是不阻塞
# 异步阻塞
    # 同时进行的
    # 每一件事儿都会遇到阻塞事件
# 异步非阻塞
    # 几个事情同时进行
    # 每一件事都不阻塞
# import os,time

# print(os.getpid(),os.getppid())
# get pid process id 获取当前进程号
# get ppid parent process id 获取当前父进程号
# time.sleep(20)
# print(os.getpid())

# 子进程和父进程之间的关系
# pycharm启动了py文件
# py文件就是子进程
# pycharm就是父进程

开启子进程

# import multiprocessing  # 这是个包
import os
from multiprocessing import Process

def son_process():
    '''这个函数中的代码是在子进程中执行的'''
    print('执行我啦',os.getpid(),os.getppid())

if __name__ == '__main__':
    # son_process的外面是一个主进程
    print('1 -->',os.getpid())
    p = Process(target=son_process)
    p.start()

猜你喜欢

转载自www.cnblogs.com/pythonz/p/10080678.html