标签:自动化 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处理。
标签:自动化 ram 技术 过程 没有 复用 输入 socket 必须
原文地址:https://www.cnblogs.com/pankypan/p/11137391.html