上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页
摘要: 异步IO(Asynchronous I/O) Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入。先看一下它的流程: 用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先 阅读全文
posted @ 2018-07-12 23:26 芳姐 阅读(693) 评论(0) 推荐(0) 编辑
摘要: 多路复用IO(IO multiplexing) O multiplexing这个词可能有点陌生,但是如果我说select/epoll,大概就都能明白了。有些地方也称这种IO方式为事件驱动IO (event driven IO)。我们都知道,select/epoll的好处就在于单个process就可以 阅读全文
posted @ 2018-07-12 23:23 芳姐 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 非阻塞IO(non-blocking IO) Linux下,可以通过设置socket使其变为non-blocking,当对一个non-blocking socket执行读操作时,流程是这个样子 从图中可以看出,当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block 阅读全文
posted @ 2018-07-12 22:57 芳姐 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 阻塞IO(blocking IO) 在Linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达(比如,还 阅读全文
posted @ 2018-07-12 22:16 芳姐 阅读(2127) 评论(0) 推荐(0) 编辑
摘要: 一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\),它会涉及到两个系统对象,一个是调用这个IO的process \(or thread\),另一个就是系统内核\(kernel\)。当一个read操作发生时,该操作会 阅读全文
posted @ 2018-07-12 20:52 芳姐 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 一 gevent模块 Gevent是一个第三方库,可以轻松通过gevent实现并发同步或异步编程。在gevent中用到的主要模式是Greenlet,它是以C扩展模块形式接入Python的轻量级协程。Greenlet 全部运行在主程序操作系统进程的内部,但它们被协作式地调度。 遇到IO阻塞时会自动切换 阅读全文
posted @ 2018-07-12 14:34 芳姐 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 一 greenlet模块 如果我们在单个线程内有20个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send。。。非常麻烦),而使用greenlet模块可以非常简单地实现这20个任务直接的切换 单纯的切换(在没有io的情况下或者没有重复 阅读全文
posted @ 2018-07-12 11:10 芳姐 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 一 引子 一:其中第二种情况并不能提升效率,只是让CPU能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率。为此我们可以基于yield来验证。yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下: 单纯地切换反而会降低运 阅读全文
posted @ 2018-07-12 10:17 芳姐 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 一 进程池与线程池 基于多进程或多线程实现并发的套接字通信,这样的实现方式存在的缺陷是:服务开启的进程数或线程数都会随着并发的客户端数目的增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪,于是我们必须对服务端开启的进程数或线程数加以控制,让机器在一个自己可以承受的范围内运行,这就是进 阅读全文
posted @ 2018-07-12 08:46 芳姐 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 一 线程queue 有三种不同的用法 class queue.Queue(maxsize=0) # 队列:先进先出 class queue.LifoQueue(maxsize=0) # 堆栈:后进先出 class queue.PriorityQueue(maxsize=0) #优先级队列:存储数据时 阅读全文
posted @ 2018-07-11 19:06 芳姐 阅读(167) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页