
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
系统架构优化对于软件开发程序员来说是需要长期关注的一个问题,而今天我们就通过案例分析来了解一下,系统架构优化都有哪些常用方法。
负载均衡
负载均衡其实就是解决一个分活的问题,对应到分布式系统,一般在逻辑服的前面都会安放一个负载均衡器,比如NGINX就是的解决方案。负载均衡不限于分布式系统,对于多线程架构的服务器内部,也需要解决负载均衡的问题,让各个worker线程的负载均衡。
多线程、协程并行化
虽然硬件架构的复杂化对程序开发提出了更高的要求,但编写充分利用多CPU多核特性的程序能获得令人惊叹的收益,所以,在同样硬件规格下,基于多线程/协程的并行化改造依然值得尝试。
多线程不可避免要面临资源竞争的问题,我们的设计目标应该是充分利用硬件多执行核心的优势,减少等待,让多个执行流畅快的奔跑起来。
对于多线程模型,如果把每一个要干的活抽象为一个task,把干活的线程抽象为worker,那么,有两种典型的设计思路,一种是对task类型做出划分,让一类或者一个worker去干特定的task,另一种是让所有worker去干所有task。
一种划分,能减少数据争用,编码实现也更简单,只需要识别有限的竞争,就能让系统工作的很好,缺点是任务的工作量很可能不同,有可能导致有些worker忙碌而另一些空闲。
另一种划分,优点是能均衡,缺点是编码复杂性高,数据竞争多。
有时候,我们会综合上述两种模式,比如让单独的线程去做IO(收发包)+反序列化(产生protocoltask),然后启动一批worker线程去处理包,中间通过一个taskqueue去连接,这即是的生产者消费者模型。
协程是一种用户态的多执行流,它基于一个假设,即用户态的任务切换成本低于系统的线程切换。
通知替代轮询
轮询即不停询问,就像你每隔几分钟去一趟宿管那里查看是否有信件,而通知是你告诉宿管阿姨,你有信的时候,她打电话通知你,显然轮询耗费CPU,而通知机制效率更高。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。