摘要:
一.IO模型介绍 本文讨论的背景是Linux环境下的network IO. 本文最重要的参考文献是Richard Stevens的"UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ", 6.2节"I/ 阅读全文
摘要:
一.协程的引入 对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算,这样就保证了该线程能够最大限度地处于就绪态,即随时都可以被cpu执行的状态,相当于我们在用户程序级别 阅读全文
摘要:
queue队列: 使用import, 用法与进程Queue一样 queue is especially useful in threaded programming when information must be exchanged safely between multiple threads. 阅读全文
摘要:
python为我们提供的标准模块concurrent.futures里面有ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)两个模块. 在这个模块里他们俩在用法上是一样的. concurrent.futures官方文档: https://docs.pyt 阅读全文
摘要:
1.GIL锁(Global Interpreter Lock) Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行。虽然 Python 解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行。 对Py 阅读全文
摘要:
和线程概念的引入背景 进程提供了多道编程, 让不同的程序可以看似同时在执行, 提高了计算机的利用率.但是进程也有它的缺陷: 1.进程只能在一个时间干一件事情, 如果想同时干两件事或者多件事, 进程就无能为力了. 2.进程再执行的过程中如果阻塞, 整个进程就会挂起, 即使进程中有些工作不依赖于输入的数 阅读全文
摘要:
锁——multiprocessing.Lock 什么是锁? 当多个进程使用同一份数据资源的时候,会引发数据安全或顺序混乱问题。这个时候我们希望进程可以一个一个的去获取和修改数据,将几个并发的进程编程串行,这样就可以保证数据的安全。我们可以引用Lock模块来帮我们来实现将异步执行的程序在加锁的代码段中 阅读全文
摘要:
进程池的概念 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程也需要消耗时间。第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的 阅读全文
摘要:
什么是验证合法性? 即在客户端想要和客户端进行链接的时候, 我们对客户端的身份进行验证是否合法. 我们如果想在分布式系统中实现一个简单的客户端链接认证功能, 但是又不想SSL那么复杂, 那么我们可以利用hmac + 加盐的方式来实现. 首先介绍两个方法,: 1. os.urandom(n) 该方法是 阅读全文
摘要:
TCP协议的socket一次只能和一个客户端通信, 而socketsever可以时间和多个客户端通信. socketserver是在socket的基础上进行了一层封装, 它底层还是调用的socket. 我们通过以下代码来看下socketserver如何使用: import socketserver 阅读全文