性能相关

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. 如何提高爬虫的并发?
- 进程
- 线程

以上是关于性能相关的主要内容,如果未能解决你的问题,请参考以下文章

Jekyll 偏移代码片段高亮的初始行

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

是否可以动态编译和执行 C# 代码片段?