如何提高高性能服务器并发量

如何提高高性能服务器并发量,第1张

消除瓶颈是提高服务器性能和并发能力的唯一途径,所以可以通过该方法来提高高性能服务器并发量。感兴趣的话点击此处,免费了解一下

采用多线程多核编程,使用事件驱动或异步消息机制,尽量减少阻塞和等待 *** 作(如I/O阻塞、同步等待或计时/超时等)。它的原理如下:
1,多线程多核编程,消除cpu瓶颈。
2,采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈。
3,采用事件驱动或异步消息机制,可以消除不必要的等待 *** 作。
4,如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈。
5,在事件驱动框架或异步消息中统一处理timer事件,变同步为异步,而且可以在一个线程处理无数timer事件。
6,深入分析外部的阻塞来源,消除它。 比如数据库查询较慢,导致服务器处理较慢,并发数上不去,这时就要优化数据库性能。
7,如果与某个其他server通信量很大,导致性能下降较多。 可以考虑把这两个server放在一个主机上,采用共享内存的方式来做IPC通信,可以大大提高性能。

亿万克作为中国战略性新兴产业领军品牌,拥有行业前沿技术,致力于新型数据中心建设,构筑云端安全数字底座,为客户提供集产品研发、生产、部署、运维于一体的服务器及IT系统解决方案业务,产品和技术完全拥有自主知识产权,为客户提供全方位安全自主可控技术服务保障。

本文先提供一个没有采用的方式--采用事务加select for update的形式

这么做呢就有个非常严重的问题,--- 同一时刻只有一个有效服务
如果A系统拿到了数据,开始了事务但是没提交,那么B系统同样的条件也会查到同一批还没处理好提交的数据,此时B系统该查询线程就会阻塞等待A提交事务这么看问题就来了,这里虽然保障了同一时刻只有一个服务可以拿到并处理一批数据,但是也导致了效率特别低,而且后面 无论扩展多少服务应用都没啥用

步骤解释:

我这里只写了大致的方案,一些redis高可用以及数据幂等性自己考虑去

这种方式是 我觉得最好的方案 了,完全保障了每个服务每次 处理 mysql的数据都是 互不相同的数据 ,完全 避免了竞争 问题

但是我们目前没有用这种方案,原因是目前我们redis内存只申请到一个比较小的内存,而 zset采用的跳跃表结构虽然保障了数据查询非常快速,但是也非常占用内存 ,预估了一下按照我们的数据量起码要存储300万数据,用到的内存量是 3~4G 之间,好家伙直接把我们所有内存都用了,其他服务还用个屁而且这玩意为了保障数据安全,不进行数据淘汰起码还要留个1G空闲安全空间那肯定就用不了了

如果你们的服务 数据量够小 或者 内存够大 ,redis又做到了 高可用,高可靠 ,那么我还是 十分推荐 用这种方案,毕竟很多服务都是 性能为王!

2个或者多个任务(独立的活动)同时发生(进行)

比如,word启动后就是一个进程,ie浏览器启动后也是一个进程
账号服务器和游戏逻辑服务器开启后也是一个进程,所以可能发生的就是 服务器进程之间的通信
如果在同一个电脑上,进程间的通信的方式可以是——

如果是不同电脑上,则可以使用

线程更像是轻量级的进程,每个线程都有自己独立的运行路径,但是一个进程中的所有线程都是共享地址空间的(也就是 共享内存 ),比如说全局变量,指针,引用这些,都是可以 在线程之间传递 的。相比于进程之间需要通信,多线程的开销是远远小于多进程的。

当然共享内存也有新问题,比如 数据一致性问题 ,比如线程A和线程B如果同时要向地址空间中写数据,当然应该有一个先后,不然会产生 覆盖 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10747118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存