事件驱动 所谓事件驱动,就是你点不同类型的按钮, 电脑执行不一样的操作。从事件角度说, 事件驱动程序的基本结构是由事件收集器, 事件发送器, 事件处理器组成。
所谓事件驱动,就是你点不同类型按钮,电脑执行不一样的操作。 从事件角度说,事件驱动程序的基本结构是由事件收集器、事件发送器和事件处理器组成。 首先我们来用一个例子谈一下什么叫事件驱动: 网管想知道有没有客户需要续费,点餐,饮料之类的服务,他有两种办法: 第一种,网管过去一个一个问过来,需不需要续费,点餐,饮料之类的服务,但这样效率太低,费时费力。 所以他想到了第二种办法:让客户通过机子上的自助服务系统注明是要续费还是点餐或是饮料(事件收集器)并通过提交按钮(事件发送器)向网管发送请求,这样的话,网管只需要查看自主系统就可以清楚的知道用户的需求,并根据需求的不同分门别类的进行处理(这里网管作为事件处理器),从而大大的提高效率。 所以说事件驱动的处理方式是通过提交请求到处理器处,然后处理器通过把所有信息分门别类的进行处理,从而大大加快事件处理的速度。 接下来我们谈一谈异步非阻塞io,首先我们要知道几个概念: 既然有异步,肯定有同步,既然有非阻塞,肯定也有阻塞。我们来用几个例子解释一下。 一,同步阻塞 你用聊天工具问好基友一个问题,然后开始等待好基友的回答,期间什么事也不做,直到好基友回答了你的问题,对话结束。 2,同步非阻塞 还是你用聊天工具问好基友一个问题,这一次好基友设置了及时回话,直接就告诉你:“我正在思考中”,然后过了一会,你想知道他想好了没有,就再次提问,好基友又用及时回话告诉你:“催啥我还在想”。如此持续N遍,终于好基友想好了。在你第N+1遍提问的时候,你的好基友把答案告诉了你,对话结束。 3,异步阻塞 没错,你又用聊天工具问好基友一个问题(基友:哪来的这么多问题?),这次你发现一直等你的好基友回答也太浪费时间了,所以你问完就用手机开了把农药。玩到一半的时候,基友给你回了消息(真的慢,,):这个问题我想到了前一半:bulabula,,,然后你抓紧追问,那还有一半呢?那边又没消息了,估计基友又是去思考了。得了,继续玩游戏呗。等你连开了十几把,基友那边终于想好了,回消息和你说:“另一半是bulabula,,,,”对话结束。 4,异步非阻塞(敲黑板,“同学们记笔记记笔记“) “我发誓这是最后一个问题了”,你对准备买车票过来*你的远方基友如是说道,然后你把问题提问给同学,并告诉基友:“等你全想清楚的再回答”,基友看到了消息秒回一句“不答行不?”嘴上这么说,基友又开始去想问题了。这次你同样没傻傻等基友的答案,而是打开b站看起了鬼畜,听了很久之后,你的好基友总算想好了答案并主动回复你:“你问我的那个问题的答案是bulabula,,,”对话结束。 所以同步和异步的差别在于你自己即客户端是等待对方回答,还是提问之后去做其他事等待对方主动找你回答。 而阻塞和非阻塞的差别在于你的好基友即进程是想清楚了再回答你还是立刻回复你,然后再去想答案。
协程是解决io密集性任务的, 比如多进程,多线程.但理论上一台电脑的线程数,进程数是有限的, 而且线程进程的切换也比较浪费时间, 所以出现了协程的概念, 协程允许一个执行过程A中断, 然后转到执行过程B,在适当的时候再装回来,有点类似多线程,有2个优势. • 协程的数量理论上可以是无限个,而且没有线程之间的切换动作,执行效率比线程高。 • 协程不需要“锁”机制,即不需要lock和release过程,因为所有的协程都在一个线程中。 • 相对于线程,协程更容易调试debug,因为所有的代码是顺序执行的。
使用IO多路复用+ (select, epoll)并不一定比多线程+ 同步阻塞IO性能好, 其最大优势可以处理更多的连接 多线程 +同步阻塞性能好开辟太多线程, 线程开辟,销毁开销还是较大, 倒是可以使用线程池 ,线程多, 线程自己使用的内存也很可观; 多线程切换时要保护现场和恢复现场,线程过多, 切换会占用大量的时间。 连接较少, 多线程+同步阻塞IO模式比较合适,效率也不低。如果连接非常多, 对服务端程序来说, IO并发还是比较高的, 这时候,开辟线程其实也不是很划算, 这时候IO多路复用或许是更好的选择。
高内聚低耦合 高内聚 就是说相关度比较高的部分尽可能的集中, 不要分散。 低耦合就是说两个相关的模块尽可能把依赖的部分降低到最小。 遇到问题首选稳定可靠的解决方案。比如处理excel报表等直接用pandas提供的函数非常方便,我经常看见还是有人自己写一堆恶心的处理函数而不用pandas。如果自己造轮子确保测试和文档,否则后续维护和上手会有很大成本
SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。 SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。