网络编程

开发架构

  • B/S: browser/server
  • C/S: client/server

OSI七层模型

  • 应用层
  • 表示层
  • 会话层
  • 传输层: 建立端口到端口的通信, TCP/UDP协议
  • 网络层: 引入IP地址来进行跨局域网通信, 因特网协议
  • 数据链路层: 规定分组方式, 以太网协议(局域网), MAC地址
  • 物理层: 基于电信号发送二进制流

socket

  • socket模块内部将OSI七层模型的复杂操作进行了封装

subprocess

  • 远程向DOS系统发送指令, 并接受DOS系统返回的结果
  • subprocess.Popen('命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

粘包问题

  • 不确定对方发送数据的长度
  • 数据长度小, 发送间隔时间短的数据, 会被打包一次性发送
  • 通过struct模块解决粘包问题: 先发送一个包含数据长度的报头告知对方即将发送的数据的长度

socketserver

TCP

  • 流式协议
  • 需要建立双向连接( 三次挥手)
  • 反馈机制: 往对方发送数据, 必须要得到返回消息, 否则就会在一段时间内一直发送
  • 面向连接的可靠数据传输协议

UDP

  • 面向数据的不可靠数据传输协议
  • 不需要建立双向通道
  • 传输速度快
  • 不会有粘包问题
  • 发送数据不需要得到对方返回消息

并发编程

多道技术

  • 单道: 内存中只存在一个任务
  • 多道: 内存中存在多个任务(分时交替运行, 切换+保存状态)

并发和并行

  • 并发: 一段时间内执行多个任务, 这些任务分时交替运行
  • 并行: 一个时间点上可以运行多个任务

进程

  • 程序: 数据和指令的集合, 静态的概念
  • 进程: 程序关于某个数据集合的一次运行, 动态的概念
  • 进程时操作系统进行资源分配的基本单位
  • 进程调度:

    1. 先来先服务: 谁先就绪就先执行谁
    2. 短作业优先: 谁的预计执行时间短就执行谁
    3. 时间片轮转法: 为每个进程分配一个时间段, 在这个时间段内执行该进程
    4. 分级反馈队列: 设置多个就绪队列, 设置不同的优先级
  • 进程的三种状态:

    1. 就绪态
    2. 执行态
    3. 阻塞态
  • 同步和异步: 面向被调用者的消息提醒机制
    1. 同步: 等有结果再返回
    2. 异步: 先返回, 再执行, 有结果再通知
  • 阻塞和非阻塞: 面向调用者的等待消息的状态
    1. 阻塞: 死等
    2. 非阻塞: 等待的同时可以干其他事情
  • 创建进程的两种方式:
    1. p=Process(target=函数名, args=(参数, ))
    2. class MyProcess(Process)--->def run(self)--->p=MyProcess()

僵尸进程和孤儿进程

  • 僵尸进程: 进程结束了, pid没被回收
  • 孤儿进程: 子进程还行执行, 主进程异常结束

守护进程

  • 主进程等待子进程结束再结束

互斥锁

  • 将并发变为串行, 牺牲了执行效率, 保证可数据安全

队列

  • 相当于一个数据中转站, 可以实现多进程传入或者获取数据(先进先出)

IPC进程间通信

  • 进程间的数据是相互隔离, 可以通过队列实现进程间通信

生产者与消费者模型

  • 通过容器解决生产者和消费者之间的强耦合问题
  • 生产者: 产生数据的
  • 消费者: 使用数据多的

线程

  • 进程是一个资源单位, 进程是一个执行单位, 是CPU运行调度的最小单位
  • 进程被创建时就带有一个线程
  • 一个进程内可以创建多个线程, 这些线程共享进程的资源
  • 线程的开销要远小于进程

GIL

  • GIL本质上就是一个互斥锁
  • GIL使得同一时刻一个进程中只有一个线程运行(多线程不能并行, 但可以并发执行)
  • CPython解释器的内存管理不是线程安全的

多线程与多进程的选择

  • I/O密集型: 多线程
  • 计算密集型: 多进程

死锁

  • 多线程下因资源竞争而才造成的相互等待现象

递归锁

  • 递归锁的特点是在一个线程内可以被多次acquire

  • 递归锁的内部维护了一个Lock和一个counter, 每acquire一次计数加一,release一次计数减一, 当计数为0, 既所有acquire都release之后才会释放给其他线程使用

信号量

  • 信号量相当于多把互斥锁, 可以控制访问资源的进程数量
  • sm = semaphore(5) 表示一次允许五个线程访问数据

线程队列

  • FIFO队列
  • LIFO队列
  • 优先级队列

event事件

  • 可以控制其他线程的执行

进程池与线程池

  • 可以控制程序允许创建的进程和线程数量, 防止超出硬件承受范围

协程

  • 在单线程中实现并发
  • 线程是系统级别的,由操作系统控制, 协程是程序级别的, 由程序员手动控制
  • 没有上下文切换的开销 , 节省了时间和空间
  • 不能利用多核优势, 进行阻塞操作会阻塞整个程序

gevent

  • 实现协程

IO模型

  • 阻塞IO
  • 非阻塞IO
  • 多路复用IO
  • 异步IO

Python3 网络编程和并发编程总结的更多相关文章

  1. python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点

    python 闯关之路四(下)(并发编程与数据库编程)   并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型   操作系统工作原理介绍.线程.进程演化史.特点.区别 ...

  2. 【Java并发编程】并发编程大合集-值得收藏

    http://blog.csdn.net/ns_code/article/details/17539599这个博主的关于java并发编程系列很不错,值得收藏. 为了方便各位网友学习以及方便自己复习之用 ...

  3. .net 系列:并发编程之一 并发编程的初步理论

    一.关于并发编程的几个误解 1)并发就是多线程 实际上多线程只是并发编程的一种形式而已,在C#中还有很多其他的并发编程技术,包括异步编程,并行编程,TPL数据流,响应式编程等.  2)只有大型服务器才 ...

  4. 【Java并发编程】并发编程大合集

    转载自:http://blog.csdn.net/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容按照由浅 ...

  5. C#并发编程-1 并发编程概述

    一 并发编程简介 1.1 关于并发和并行 并发和并行的概念: 并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以 ...

  6. python3全栈开发-并发编程,多进程的基本操作

    一 .multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程. ...

  7. Python网络编程与并发编程

    网络编程基础 黏包 , 并发 计算机网络的发展及基础网络概念 Python 中的进程与 锁 Python IO 多路复用 \协程

  8. Python之网络编程之并发编程的IO模型,

    了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...

  9. python3全栈开发-并发编程的多进程理论

    一. 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): duoduo在一个时间段内有很多任务要做:python备课的任务,写 ...

随机推荐

  1. Python多线程与队列

    Python多线程与Queue队列多线程在感官上类似于同时执行多个程序,虽然由于GIL的存在,在Python中无法实现线程的真正并行,但是对于某些场景,多线程仍不失为一个有效的处理方法: 1,不紧急的 ...

  2. 分析facebook的AsyncDisplayKit框架,async-display使用async-transaction

    上一篇<分析facebook的AsyncDisplayKit框架中的Transaction的工作原理>介绍了fb的asdk的异步事务ASAsyncTransaction,本篇介绍其在asd ...

  3. Video的自我学习

    直播原理 视频协议 HLS协议  [主要是直播方面(好用,但延时)] HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议. 是苹果公司Quic ...

  4. [apue] FIFO:不是文件的文件

    众所周知,FIFO中文译为命名管道,是PIPE的升级版.而PIPE是管道,系统提供的一种进程间通讯方式,FIFO与PIPE有以下方面不同: 1) FIFO需要先在文件系统创建(mkfifo),之后使用 ...

  5. ArcGIS Server10.4安装教程

    准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Server_Ent_Windows_1041_150998.iso 破解文件:Lic10.4.1.ecp #安装Server前, ...

  6. 扛把子组作业要求 20191024-3 互评Alpha阶段作品

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/9860] 组名:扛把子 组长:迟俊文 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 ...

  7. linux终端操作

    ------------恢复内容开始------------ tab键自动补全 ls列出当前文件目录: 默认是当前目录 “.”代表当前目录 “..”代表父目录 -a显示所有,而隐藏文件的第一字符为点“ ...

  8. ELK 相关问题

    1.ndex has exceeded [1000000] - maximum allowed to be analyzed for highlighting 详细报错内容: {"type& ...

  9. kubernetes实战(二十九):Kubernetes RBAC实现不同用户在不同Namespace的不同权限

    1.基本说明 在生产环境使用k8s以后,大部分应用都实现了高可用,不仅降低了维护成本,也简化了很多应用的部署成本,但是同时也带来了诸多问题.比如开发可能需要查看自己的应用状态.连接信息.日志.执行命令 ...

  10. PHP安装sodium加密扩展

    1.为什么会用到sodium加密扩展? 最近在做微信服务商相关的开发,主要用的的接口为微信小微商户进件接口.在请求相关接口中,需要对一些敏感字段进行加密,加密过程见https://pay.weixin ...