上一页 1 2 3 4 5 6 ··· 13 下一页
摘要: 2 阅读全文
posted @ 2018-02-05 10:37 Mr.hu 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 1 阅读全文
posted @ 2018-02-05 10:18 Mr.hu 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 概述 RabbitMQ,它是用来做什么的呢? 答:它是用来发消息的,消息队列。 那么,它跟我们之前的学习的python的线程queue和进程的queue有什么区别呢? 答:其实他们干的事情都是一样的。 先来说说我们之前学习的python的queue吧: 如果是两个独立的程序,即便是python 程序 阅读全文
posted @ 2017-12-20 11:09 Mr.hu 阅读(83) 评论(0) 推荐(0) 编辑
摘要: select的不足 尽管select用起来挺爽,跨平台的特性。但是select还是存在一些问题。select需要遍历监视的文件描述符,并且这个描述符的数组还有最大的限制。随着文件描述符数量的增长,用户态和内核的地址空间的复制所引发的开销也会线性增长。即使监视的文件描述符长时间不活跃了,select还 阅读全文
posted @ 2017-12-16 20:36 Mr.hu 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 概述 Python的select()方法直接调用操作系统的IO接口,它监控sockets,open files, and pipes(所有带fileno()方法的文件句柄)何时变成readable 和writeable, 或者通信错误,select()使得同时监控多个连接变的简单,并且这比写一个长循 阅读全文
posted @ 2017-12-16 20:35 Mr.hu 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 概述 select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进 阅读全文
posted @ 2017-12-16 20:34 Mr.hu 阅读(114) 评论(0) 推荐(0) 编辑
摘要: I/O模式 刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段: 正式因为这两个阶段,linux系统产生了下面五种网络模式的方案。- 阻塞 I/O(block 阅读全文
posted @ 2017-12-16 20:33 Mr.hu 阅读(71) 评论(0) 推荐(0) 编辑
摘要: FAQ? 前面介绍了gevent实现了协程,同时在遇到I/O操作时实现协程的自动切换,协程之所以能够处理大并发,其实就是把I/O操作给挤掉了,最后整个程序就变成了只有CPU的运算,由于CPU的速度很快,所以就感觉实现并发的效果。那么它和我们所说的事件驱动有什么关系吗?几个任务切换执行,当程序遇到I/ 阅读全文
posted @ 2017-12-14 23:58 Mr.hu 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 事件驱动与异步IO 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求; (2)每收到一个请求,创建一个新的线程,来处理该请求; (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求 上面的几种方式,各有千秋, 第(1 阅读全文
posted @ 2017-12-14 23:56 Mr.hu 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 概述 前面我们介绍了gevent遇到I/O操作就会自动切换,现在我们使用gevent爬一个实际的网页下来 串行爬网页 gevent协程爬网页 通过以上同步和异步爬网页所花的时间,我们并不能看见并发比串行速度上快多少?为什么? 其实urllib默认和gevent是没有关系的。urllib现在默认情况下 阅读全文
posted @ 2017-12-14 23:46 Mr.hu 阅读(237) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 13 下一页