性能相关
Posted jassin-du
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能相关相关的知识,希望对你有一定的参考价值。
高性能相关
- 提高并发:买电脑->写程序->开进程->开线程->单线程
本质:
浏览器本质,socket客户端遵循Http协议
HTTP协议本质:通过\\r\\n分割的规范+ 请求响应之后断开链接 == > 无状态、 短连接
具体:
Http协议是建立在tcp之上的,是一种规范,它规范定了发送的数据的数据格式,然而这个数据格式是通过\\r\\n 进行分割的,请求头与请求体也是通过2个\\r\\n分割的,响应的时候,响应头与响应体也是通过\\r\\n分割,并且还规定已请求已响应就会断开链接 -----即---> 短连接、无状态
url = ‘www.cnblogs.com‘ sk = socket.socket() # 连接的过程是:阻塞 sk.connect((url,80)) # HTTP协议 content = "GET /wupeiqi HTTP/1.1\\r\\nHost: %s\\r\\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36\\r\\n\\r\\n" %url sk.sendall(content.encode(‘utf-8‘)) # 等待服务端返回内容:阻塞 data = sk.recv(8096) print(data) sk.close()
IO多路复用
目标:用于监听多个socket对象是否发生变化。
import select while True: # 让select模块帮助我们去检测sk1/sk2两个socket对象是否已经发生“变化” # r=[] # 如果r中有值 # r=[sk1,] 表示:sk1这个socket已经获取到响应的内容 # r=[sk1,sk2] 表示:sk1,sk2两个socket已经获取到响应的内容 # w=[],如果w中有值 # w=[sk1,], 表示:sk1这个socket已经连接成功; # w=[sk1,sk2],表示:sk1/sk2两个socket已经连接成功; r,w,e = select.select([sk1,sk2],[sk1,sk2],[],0.5)
面试题:
1. 什么是异步非阻塞?
2. Http协议是什么?
3. 如何提高爬虫的并发?
- 进程
- 线程
以上是关于性能相关的主要内容,如果未能解决你的问题,请参考以下文章