先自我介绍一下,否则会误导各位读者,我不是什么技术大牛,今年才24岁,只恨高中时才接触电脑太晚。现做小型网络游戏服务器开发,我很喜欢、热爱自己的工作。
正文:
不谈操作系统,只说本质,发掘操作系统性能的核心就是epoll和iopc思想了。(当然都是基于异步模式)
无论是Linux上的epoll还是Windows上的iopc其实本质是一样的,更多区别iopc比epoll封装的更加全面性,但是这不影响各自的用途。
这里不再细说它们各自的用法和基本原理,网上的文章多如牛毛。只谈论它的核心思想,因为思想是通用的,甚至在非计算机方面也能大展拳脚。
我认为核心思想概括:“多线程+多路复用”。
iopc和epoll的本质是:多路复用思想。就是一个待处理的队列排满了期待处理的工作,正常情况是,我派出一个人(既一个线程)不断循环等待处理这个队列里面的问题,发现在多核CPU系统下它不能发挥硬件的性能,所以要派出多个人(既多个线程)来处理这一个队列里面的问题,这就满足了我们。
但,多数是这样的:那我们再想一下,假设这系统现在就连接了一个硬件,那么出现访问冲突,于是硬件驱动程序的作用就发挥了,它把一个硬件虚拟成多个硬件供多个线程来使用,但是又发现在多个线程同时访问一个硬件时又需要原子性操作,所以那些线程同步对象又起到了作用,那我们这么折腾了2下第一眼看来我们是性能下降了很多,但是仔细想一下原来效率提高了,于是效率和线程数就成了一对关系函数。
本人归纳如下一个小公式,能力有限只能写成这样了:(其实因数还受硬件数单独影响)
效率≈使用率=1-硬件数/(线程数+因数);(硬件数趋近于1,效率越接近使用率)
上面的公式可以看到以下几个问题:
1.效率受硬件和线程数影响,当把硬件看做常量,所以效率受线程数影响,但是线程数增长速率和使用率的增长速率成反比例关系。
2.如果硬件是变量(例如热插拔),那必定会影响到使用率也会影响到因数。
3.我们总想让效率趋近于1(即100%),但是效率是由多个使用率组成的。
由上面的第3点引出第2个公式:(此处效率是以操作系统为对象看用户软件)
效率=使用率(网卡)+使用率(内存)+使用率(CPU)+...+使用率(其他等等)/硬件类型数;
老实说,现在做一个游戏服务器端,不可能单独看一台机器,其实这2个公式也同样适合整个系统的构建,从追求一台机器的高性能,到整合整个系统的高性能,省下来的性能就是硬件就是“钱”。
中心架构拓扑:
一台服务器内核总有最少一个调度线程,处理各个工作线程的调度工作;同样,当一个系统,也需要一个中心服务器来调度整个系统内的服务器工作,用来实现系统内的性能整合;依次无限扩展下去,那我们关注的是结果。。。。
采用中心架构可无限扩展,即使全世界的人都要玩一个游戏的需求也可以满足;但是如果就一个人玩,那整个系统的核心服务链都要工作起来。
网状拓扑:
没有特殊需求,基本没有用处,开发成本维护成本都很高,而且它的可扩展行还要另做考虑。
其他拓扑结构:
双中心拓扑、中心前置拓扑、环状拓扑等等结构都没有中心拓扑结构好。
谈epoll和iocp,论性能核心思想
最新推荐文章于 2025-05-23 22:57:47 发布