网络编程与并发编程(总结)

网络编程
  软件开发架构
    c/s
      client
      server
    b/s
      broswer
      server
ps:b/s本质上也是c/s架构

 


OSI七层协议
  应用层
  表示层
  会话层
  传输层
  网络层
  数据链路层
  物理连接层

 


物理连接层
  传输二进制的数据

 


数据链路层(以太网协议)
  1.规定了二进制数据的分组依据
  2.规定了每台计算机都必须有一块网卡
    ps:网卡上刻有12位16进制的编号
      前6位厂商编号
      后6位流水线编号
    编号:mac地址 唯一标识一台计算机
  1+2=以太网协议

基于以太网协议通信
  通信基本靠吼
    广播
    单播
  广播风暴
交换机
  让连接了交换机的计算机实现彼此之间互联
局域网
  构成互联网的基本单位
  ps:以太网协议不能跨局域网传输
路由器
  连接不同局域网
网关

 


网络层
  IP协议
  规定了任何接入互联网的计算机都必须有一个IP地址
  ip地址:点分十进制
  版本:IPV4 IPV6
  最小:0.0.0.0
  最大:255.255.255.255
  ip地址是动态分配的 不是一成不变的

arp协议
  根据ip地址解析对方的mac地址

 


传输层
  TCP UDP
  基于端口工作的协议
  端口(port):唯一标识一台计算机上的某一个应用程序,port号是动态分配的并且是有限
  端口号的范围:0~65535
  0~1024通常是操作系统需要使用的端口号
  建议你使用8000之后的端口
  django默认端口 8000
  flask默认端口 5000
  redis 6379
  Mysql 3306

 


应用层
  HTTP协议
  FTP协议

IP+PORT能够唯一标识一台联入互联网的计算机上的某一个应用程序

TCP协议
  三次握手
  四次挥手
  TCP之所以可靠的原因在于:反馈机制
  发送消息后必须等到对方回应 才会将内存中的数据清除

UDP协议
  数据报协议
  无需双向通道
  数据是不安全的

TCP类似于打电话
UDP类似于发短信

如何解决TCP的粘包问题
  基于TCP实现大文件的上传
  客户端:
    1.先生成一个字典
    2.制作字典的报头
    3.发送字典的报头
    4.发送字典数据
    5.发送真实数据
  服务端
    1.接收固定长度的报头
    2.解析获取字典的长度
    3.接收字典数据
    4.解析获取真实数据信息
    5.接收真实数据

 

socketserver
  能够实现并发的效果

并发:看上去像同时运行的
并行:真正意义上的同时执行
ps:单核的计算机绝对不可能实现并行 但是可以实现并发

 

并发编程
  操作系统发展史
    基于单核研究
    多道技术
      1.空间上的复用
        多个程序公用一套计算机硬件
      2.时间上的复用
        切换+保存状态
        例子:洗衣 烧水 做饭
      切换
        1.程序遇到IO操作系统会立刻剥夺走CPU的执行权限
          IO:input,sleep,accept,recv...阻塞 日常生活中使用软件通常都是IO密集型
        2.当你的程序长时间占用CPU的时候也会被操作系统剥夺走cpu的执行权限

 

进程理论

  进程调度
    时间片轮转法+多级反馈队列
  进程三状态图
    ps:程序不会立刻进入运行态 都会现在就绪态等待cpu的执行

同步异步:指的是任务的提交方式
  同步:提交任务之后原地等待任务的返回结果 期间不做任何事
  异步:提交任务之后立刻执行下一行代码 不等待任务的返回结果
>>> 结果的获取使用异步回调机制

阻塞非阻塞:指的是程序的运行状态
  阻塞:阻塞态
  非阻塞:就绪态或者是运行态

创建进程的两种方式
  使用使用Process实例化
  继承Process类重写run方法
  ps:windows在开启进程的时候必须在__main__代码块内,因为windows是以模块导入的方式从上执行代码


什么是进程:
  正在运行的程序
    一个进程对应到内存中就是一块独立的内存空间

join方法
  主进程等待某个指定的子进程运行结束,不影响其他子进程的运行

 

进程对象及其他方法
  current_process().pid
  os.getpid
  os.getppid
  terminate()
  is_alive()

 

守护进程
  daemon
  这一句化必须在start之前使用

进程间数据是隔离的

 

互斥锁(抢票实例)
  多个程序操作用一份数据的时候会出现数据错乱的现象
  如何避免:
    将操作数据的部分加锁处理
    会将并发变成串行牺牲了效率但是保证了数据的安全
  抢锁
    acquire()
  释放锁
    release()
  例子:抢厕所

 


进程间通信IPC机制

生产者消费者模型

线程理论

创建线程的两种方式

线程间通信

守护线程

线程对象及其他方法

posted @ 2019-08-12 16:37  泡泡茶壶i  阅读(287)  评论(0编辑  收藏  举报