随笔分类 - 网络编程
1
摘要:[TOC] 协程 什么是协程 在单个线程下实现并发效果,在多个任务之间切换。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置,当程序中存在大量不需要CPU的操作时(IO),适用于协程。 官方说法:协程称为微线程,就是操作系
阅读全文
摘要:[TOC] 队列: from queue import Queue,LifoQueue,PriorityQueue 以上三种队列有什么不同? 1. Queue 与 joinableQueue类似 2. LifoQueue(栈,特点:后进先出) 3. PriorityQueue(具备优先级的队列) 第
阅读全文
摘要:Event事件 用来同步线程之间的状态。 举个例子: 你把一个任务丢到了子线程中,这个任务将异步执行。如何获取到这个任务的执行状态 解决方法: 1. 如果是拿到执行结果 我们可以采用异步回调, 2. 在这里我们采用另外一种方法来做:Event Event事件 第一阶段:采用轮询方式去获取线程状态
阅读全文
摘要:同步异步 阻塞:进程遇到IO操作,导致任务无法继续执行其他代码,称为阻塞。 非阻塞:程序在正常运行没有遇到IO操作,或者通过某种方式使程序即时遇到了也不会停在原地,还可以执行其他操作,以提高CPU的占用率 阻塞、非阻塞:指程序的运行状态 并行、并发、串行:处理任务的方式 同步:提交任务后需要在原地等
阅读全文
摘要:[TOC] 线程池与进程池 池:表示容器。线程池就是存放线程的容器,进程池就是存放进程的容器 为什么要存放到线程池、进程池中 1. 避免频繁的创建和销毁(进程、线程)来的资源开销 2. 可以限制同时存在的线程数量,以保证服务器不会因为资源不足而崩溃 3. 帮我们管理了线程的创建和销毁 4. 管理了任
阅读全文
摘要:[TOC] GIL 什么是GIL锁 为什么需要加锁 带来的问题 如何解决 关于性能的讨论 计算密集型任务:进程执行更快 线程: 进程: IO密集型:线程执行更快 线程: 进程: 自定义锁与GIL的区别 GIL锁住的是解释器级别的数据,比如对象的引用计数,垃圾分代数据等等,具体参考垃圾回收机制详解 自
阅读全文
摘要:信号量 它并不能解决安全问题,而是用来限制最大的并发量
阅读全文
摘要:递归锁 第一种情况:同一个线程一把锁加锁多次,不影响执行 第二种情况:多线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁 总结: 1. 同一个线程对同一把锁加锁多次,不影响执行 2. 同一个线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁
阅读全文
摘要:死锁 死锁指的是某个资源占用后,一直得不到释放,导致其他需要这个资源的线程进入阻塞状态 产生死锁的情况: 对同一把互斥锁加锁的多次(对同一个) 死锁的另外一种情况: 结果:
阅读全文
摘要:[TOC] 进程: 生产者,消费者模型 在编程中,模型就是解决某个问题的固定方法或套路 生产者:泛指产生数据的一方 消费者:泛指处理数据的一方 生活案例: 食堂饭店是生产者,负责炒菜 吃饭的人就是消费者,负责吃 1. 要解决什么问题? 2. 解决办法:在生产者和消费者之间加入队列 问题:如果
阅读全文
摘要:[TOC] 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 注意:进程之间是互相独立的,
阅读全文
摘要:[TOC] 1. multiprocessing 模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocessi
阅读全文
摘要:[TOC] 1. 什么是进程 进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任务,交女朋友的任务,王者荣耀上分的任务, 但egon同一时刻只能做一个
阅读全文
摘要:并发编程 可以显示多个客户端,同时连接服务端。客户端能同时发送消息给服务器 客户端 1 客户端 2 客户端 3 客户端 4 服务端 当你运行服务端后,依次运行对应客户端文件,你会发现此时就是并发在处理数据。
阅读全文
摘要:粘包解决方案: 思路:服务端传输数据前 提前 告知客户端传输数据的大小 客户端 服务端 使用UDP进行传输数据 客户端 服务端
阅读全文
摘要:TCP遗留问题 粘包 TCP发送数据的四种情况: 假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。 服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包; 服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为T
阅读全文
摘要:[TOC] 万维网 HTTP超文本传输协议 为了使万维网客户程序与万维网服务器程序之间的交互遵守严格的协议,因此诞生了HTTP超文本传输协议。 特点 1. 位于OSI七层模型的应用层,http是一个应用协议 2. 它使用TCP连接进行可靠的传送 HTTP的报文结构。 http有两类报文: 1. 请求
阅读全文
摘要:[TOC] 网络编程 第一阶段:简单版 客户端 服务端 PS:数据在传输的过程中,使用是二进制,所以我们需要将客户端,服务端中的数据转化为二进制传输(客户端:13行,服务端:24行),转化前需要使用utf8格式编码。 第二阶段:交互式发送 客户端 服务端 此时我们可以实现客户端与服务端交互式发送消息
阅读全文
摘要:[TOC] TCP三次握手 1:上图的名词解释 SYN:同步序号。 。TCP规定SYN=1时不能携带数据,但要消耗一个序号, 因此随机选取一个序列号为seq=x 数据包(该数据包里就是一个标记seq,并没有任何有效的数据) ACK:确认序号。 (都能响应了 那肯定上一步就连接成功了啊,所以说ACK=
阅读全文
摘要:[TOC] 网络编程 模式 1. 单机模式 2. C/S模式 Clien客户端 Service服务端 3. B/S模式 Browser浏览器 Service服务端 交换机 冲突域: 在图1中,主机A只是想要发送一个单播数据包给主机B。但由于传统共享式以太网的广播性质,接入到总线上的所有主机都将收到此
阅读全文
1

浙公网安备 33010602011771号