IO多路复用和异步非阻塞的相关问题

Q1. IO多路复用作用?

    检测多个socket是否发生变化。
    操作系统检测socket是否发生变化,有三种模式:
    select:最多1024个socket;循环去检测。
    poll:不限制监听socket个数;循环去检测(水平触发)。
    epoll:不限制监听socket个数;回调方式(边缘触发)。
 

 Python模块:
   select.select
   select.epoll

 

Q2. 提高并发方案?
- 多进程
- 多线程
- 异步非阻塞模块(Twisted) scrapy框架(单线程完成并发)

Q3. 什么是异步非阻塞?
- 非阻塞,不等待。
比如创建socket对某个地址进行connect、获取接收数据recv时默认都会等待(连接成功或接收到数据),才执行后续操作。
如果设置setblocking(False),以上两个过程就不再等待,但是会报BlockingIOError的错误,只要捕获即可。
- 异步,通知,执行完成之后自动执行回调函数或自动执行某些操作(通知)。
比如做爬虫中向某个地址baidu.com发送请求,当请求执行完成之后自执行回调函数。

Q4. 什么是同步阻塞?
- 阻塞:等
- 同步:按照顺序逐步执行

key_list = ['alex','db','sb']
for item in key_list:
ret = requests.get('https://www.baidu.com/s?wd=%s' %item)
print(ret.text)

posted @ 2018-09-13 19:13  一二九  阅读(56)  评论(0编辑  收藏  举报