Python面试综合--web相关
2020-12-13 05:21
标签:自动化 ram 技术 过程 没有 复用 输入 socket 必须 详见: 详见: ajax和long poll缺点: 详见: 场景一: ? 当我们要编写一个echo服务器程序的时候,需要对用户从标准输入键入的交互命令做出响应。在这种情况下,服务器必须响应两个相互独立的I/O事件: IO多路复用:很多个网络I/O复用一个或少量的线程来处理这些连接。 详见: 1983年select出现: 1997年出现(因为长时间内select满足应用需求): 2002年epoll产生: 面试题一:什么是IO多路复用?/epoll和select,poll有什么区别? 回答思路: 思路串联:多路复用概念--> 多用复用发展历史及使用场景(select->poll->epoll)--> 留下一个问题引子(协程) 示例答案: I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。 第一次实现IO多路复用的概念是在1983年select机制的出现,在很长的时间内select都满足多路复用的各类需求,但随着技术和社会的发展,select本身1024个连接上限逐渐开始不够用了,于是在1997年poll机制应运而生,poll机制去掉了select的很多问题,比如1024链接数限制,但同时本身也存在着select一样的非线程安全缺陷,同时轮询的方式在很多场景下会造成性能和资源的浪费。2002年时,一种新的多用复用机制epoll随之产生,epoll采用的是事件触发的机制,放弃了select和poll轮询的实现方式,同时又是线程安全的,大大提高了实际场景中的并发处理能力;但epoll目前也存在一些不足的地方,比如只有Linux系统才支持,同时在一些特定的场景下,比如绝大部分TCP链接都处于就绪的状态,此时比较适合轮询的方式。 总体而言,目前多路复用技术中epoll相对使用的较为广泛,比如在Python中tornado的协程很多时候就是通过epoll机制进行切换调度的。 同步和异步: 针对应用程序来,关注的是程序之间的协作关系 阻塞与非阻塞:关注的是单个进程的执行状态 example: 老张爱喝茶,废话不说,煮开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 老张把水壶放到火上,立等水开。(同步阻塞) 老张觉得自己有点傻 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞) 老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。 老张把响水壶放到火上,立等水开。(异步阻塞) 老张觉得这样傻等意义不大 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞) 老张觉得自己聪明了。 详见: 了解过tornado或sanic吗?/有木有接触过其他web框架...? 思路: 思路串联:各框架特性--同步异步、框架选型-->埋下一个问题引子(协程) 示例答案: 有了解过tornado和sanic框架,不过之前公司的项目中大多框架选用的是django,少部分项目使用的flask。其中django设计哲学是简便、快速,强调代码复用,大而全是代表特性,而flask相对而言小而精一点。tornado和sanic是异步框架,性能都非常卓越,tornado是Facebook开源的一个项目,目前应用亦颇为广泛;sanic是基于Python3.5的近些年兴起的框架,用到了很多Python3的新特性。 一般在框架选型过程中,如果希望开发过程中框架有丰富的三方插件,推荐使用django和flask,然后部署时使用NGINX+uwsgi提高并发;如果纯粹的后端项目,更加追求性能,可以考虑使用tornado或者sanic等异步框架,像tornado、sanic这些支持协程的框架确实比较适合大多数的高并发网络IO处理。 Python面试综合--web相关 标签:自动化 ram 技术 过程 没有 复用 输入 socket 必须 原文地址:https://www.cnblogs.com/pankypan/p/11137391.htmlPython面试综合--web相关
websocket
ajax和poll
websocket与http
IO多路复用
IO多路复用定义
IO多路复用三种机制
select
poll
epoll
IO多路复用面试题
web框架
重要概念
Django
Flask
Tornado
Sanic
web框架面试题
下一篇:css透明度