2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
答案二:
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1。速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。
网上的答案的 版本怎么想怎么都太学术了。我当时看到过一个比喻特别的好, 我就模仿者把它说下来哈,有错误希望支持哈:
多进程的服务器就好比是
立体的交通系统(立交桥)虽然说建造的时候花费比较大,消耗的资源比较多,但是真要是跑起来不会交通堵塞。但是汽车在上面跑,相互通信就是个很费事儿问题(进程间通信比较麻烦);多线程就好比是平面的交通系统,造价低,但是很容易交通堵塞,
但是也有好处同步的时候方便。
在网络服务器方面:
单进程 <多进程(单线程)<多进程(多线程)
在游戏方面的应用:
I、多线程服务器,玩家数据缓存和向DB的存储我们可以开一个线程单独去做,这样不会有什么大的问题。日志和网络上面说过可以很容易切割出去,主要就是对游戏逻辑的切割。
A:按场景分线程,一个线程管理若干个场景。这样配置灵活,一个线程可以管理若干个小场影,除非有个场景人多到一个CPU跑不下来,一般的游戏都会满足需求。缺点则是不在同一线程的Object在做逻辑交互时,必须用异步,如果用到了脚本,那么这里的复杂度和性能要值得注意。如果项目中出现单个服务器解决不鸟的问题(例如战场服务器),似乎就成了多线程多进程的庞大架构。
B:将某些功能切割到其它线程,例如Object的管理和查找,NPCAI的寻路,这种方式貌似在做逻辑需要分离到别的线程模块功能时有点麻烦,如果直接上锁等待肯定不是最好的方式,所以这些逻辑必须变成异步。
2、多进程服务器,其实这里的多进程和场景多线程改成了多进程。这里玩家数据缓存和向DB的存储我觉得用一个单独的DB服务器。多进程服务器可以在GameServer和GameClient之间加一个Gate,因为在跨服场景不需频繁断线连接。多进程服务器所有的通讯都依靠网络,有些逻辑必须有网络延迟的消耗。优点是配置灵活,在物理机器性能不够时可以通过扩充物理机器来解决
服务器还有有一个很蛋疼的问题就是过载: 下面介绍一下产生的原因和解决办法:
服务器过载:
原因是高优先级处理阶段对CPU的不公平抢占。所以,如果限制高优先级处理阶段对CPU的占用率,或者限制处理高优先级的CPU个数,都可以减轻或者消除收包活锁现象。具体的可以采用以下的方法:
方法一、采用轮询机制
为了减少中断对系统性能的影响,在负载正常的情况下采用“下半处理”的方法就非常有效,而在高负荷情况下,采用这个方法仍然会造成活锁现象,这时可以采用轮询机制。虽然这个方法在负载正常的情况下会造成资源的浪费和响应速度降低,但在网络数据频繁到达服务器时就要比中断驱动技术有效的多。
方法二、减低中断的频率
这里主要有两种方法:批中断和暂时关闭中断。批中断可以在超载时有效的抑制活锁现象,但对服务器的性能没有什么根本性的改进当系统出现接收活锁迹象时,可以采用暂时关闭中断的方法来缓和系统的负担,当系统缓存再次可用时可以再打开中断,但这种方法在接收缓存不够大的情况下会造成数据包丢失。
方法三、减少上下文切换
这种方法不管服务器在什么情况下对性能改善都很有效,这时可以采用引入核心级(kerne1—leve1)或硬件级数据流的方法来达到这个目的。核心级数据流是将数据从源通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程中因为数据在内存中,因此需要CPU操作数据。
硬件级数据流则是将数据从源通过私有数据总线或是虽等DMA通过系统总线进行转发而不需要使数据经过应用程序进程,这个过程不需要CPU操作数据。这样在数据传输过程中不需要用户线程的介入,减少了数据被拷贝的次数,减少了上下文切换的开销。
区别在于:一、服务器资源伸缩性
不可大规模的伸缩服务器的性能是虚拟主机无法通过实践来更新迭代的原因。独立服务器可以在最大程度上保证服务器架构可以自由的进行改造,用户可以轻松的来通过高度自由性来合理的规划自己的服务器。独立服务器还可以让用户自己决定自身网站的网络环境,操作系统,软件和硬件的搭配。服务器上所有的软硬件都可以由用户自己配置,便于满足我们之后的需求增加和服务器升级改造。
二、负载均衡能力
我们都知道虚拟主机无法确切的知道具体用多少用户共享一台主机。当建立在服务器上的网站,访问用户突然增加时,则会影响同服务器上的其他网站的网速。另外当服务器处于高负载的情况下,很容易使得整体的处理能力下降。而独立服务器则不同,一个用户掌握一台服务器,服务器上运行的程序都由自己的决定。可以自己的分配存储空间,传输速度,硬盘容量等。让服务器一直处于负载均衡的优质服务。
三、灵活性
当我们面对业务不断增长的情况来,使用共享主机已经不能满足我们日常使用了,不仅是空间资源和带宽资源不足,同时还会受到其他用户的种种限制。共享主机为了满足同在服务器上的程序运行,要分配各种资源给予其他网站程序,所以我们在使用的时候会受到各种各样的问题。这样的话共享主机才能实现满足各种程序的同时运行。但是随着网络技术的日趋老练。他们如今希望能具有动态的网站内容,能进行交互式的会话,还可以在网站上充沛展示个性化的一面。并且好要求使用更加安全可靠的数据库和数据交互程序,也要集成电子商务等等,只有我们运行自己独立的服务器才能更加保障自己的数据,程序更加安全,为用户提供更好的服务,也可满足我们各种的需求。
四、可靠性不一样
安全性方面的思考应该是运用独立服务器的另一个主要原因。假如共用服务器的其他用户网站受到破坏,影响的不是他自己的网站,而是整台服务器的其他用户都会受到影响和牵连。
独享型服务器和共享型服务器是两种不同云服务器类型的叫法。共享型服务器是多台小鸡使用母鸡空闲状态的超线程,做到不浪费资源。
独享型就是一直都独自享用母鸡的一个超线程。
从性能上说是独享型更好,当然价格也更贵。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)