摘要: 一、前言 虽说用 Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时 SocketServer模块也是 Python标准库中很多服务器框架的基础。 socke 阅读全文
posted @ 2020-07-30 18:43 zoling7 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一、多路复用IO(IO multiplexing) IO multiplexing这个词可能有点陌生,但是如果我说 select/epoll,大概就都能明白了。 有些地方也称这种IO方式为事件驱动IO(event driven IO)。 我们都知道,select/epoll的好处就在于单个 proc 阅读全文
posted @ 2020-07-30 17:59 zoling7 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 一、阻塞IO(blocking IO) 在 linux中,默认情况下所有的 socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了 recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。 对于 network io来说,很多时候数据在一开始还没有 阅读全文
posted @ 2020-07-30 16:16 zoling7 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 一、IO模型介绍 为了更好地了解 IO模型,我们回顾下:同步,异步,阻塞,非阻塞。 1,同步: # 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回。 # 按照这个定义,其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候, # 特指那些需要其他部件协作或者需 阅读全文
posted @ 2020-07-30 12:19 zoling7 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 一、greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换。 from greenlet import 阅读全文
posted @ 2020-07-30 12:03 zoling7 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 一、前言 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态。 协程指的就是单线程下实现并发 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞 阅读全文
posted @ 2020-07-30 09:56 zoling7 阅读(128) 评论(0) 推荐(0) 编辑