(1)对比:阻塞与非阻塞、同步与异步
阻塞与非阻塞
阻塞:A程序调用B程序,A等待返回结果,等待中A程序线程被占用,不进行其它操作。
非阻塞:A程序调用B程序,A程序线程不被占用。
阻塞--》非阻塞 的最常用解决方案:缓存,A将请求依次装入缓存中,A不管与B是否执行完成,由B随后依次处理,返回给A。
同步与异步
同步:一个线程依次执行所有任务
异步:多个线程并行执行任务
同步--》异步 的最常用解决方案:多线程,依次启动多个线程执行任务,同时可以引入线程池,减少线程不断分配和销毁造成的开销。
很多人都听说过消息队列、消息中间件MQ,企业服务总线ESB等。
简单来说就是企业服务总线ESB就是搭了一条管道,所有的指令请求都可以扔进去,顺着管道流向目的地。用到的技术就是消息队列MQ,如RabbitMQ,ActiveMQ,Kafka等。
我之前在软考架构设计师的时候,案例分析中就有一个问题谈ESB的优点,与SOA做比较。在论文中我也一直阐述用到了ESB,技术框架就是RabbitMQ。
我清楚记得,我的答案说的是“异步调用”,后来过了几个月我才明白这是错的,应该是“非阻塞”,因为这里与多线程并没有关系,而是调用端的“不等待,非阻塞”,只需要将消息扔到总线里面就不用管了,实现了高可用和最终一致性,CAP中的AP。
考试结果就是案例分析查了5分,没有通过考试。
上文中的消息队列、分布式、CAP等后续再谈。
每周更新
作者:张宏伟同学
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误或有疑问,欢迎指正提出。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
作者:张宏伟同学
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误或有疑问,欢迎指正提出。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!