24 | C10K问题:高并发模型设计
该思维导图由 AI 生成,仅供参考
C10K 问题
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了C10K问题,即如何在一台物理机上同时服务10000个用户的高并发网络编程难题。文章从操作系统层面分析了C10K问题的本质,并提出了解决之道。在资源分析中,讨论了文件句柄、系统内存和网络带宽等方面的考量,并指出了C10K问题在系统资源层面是可以解决的。此外,介绍了解决C10K问题的几种解法方案,包括阻塞I/O + 进程、阻塞I/O + 线程、非阻塞I/O + readiness notification + 单线程等方法,并对每种方法的优劣进行了分析。强调了epoll在解决C10K问题中的重要性,指出不同操作系统提供的功能都是为了解决C10K问题。总结指出,解决C10K问题需要重点考虑如何和操作系统配合感知I/O事件的发生以及如何分配和使用进程、线程资源来服务上万个连接。最后,提出了两道思考题,引发读者对C10K解决方法和C10M问题的思考。整体而言,本文对C10K问题的背景、解决方案和技术特点进行了深入浅出的介绍,对高并发网络编程感兴趣的读者具有很高的参考价值。
《网络编程实战》,新⼈⾸单¥59
全部留言(24)
- 最新
- 精选
- 忆水寒第一个问题,涉及netty的三种模型,常用的是主从reacter模型,分别由eventloopgroup线程池来处理连接和IO事件,底层就是epoll。 第二个问题,要实现 C10M ,就不只是增加物理资源,或者优化内核和应用程序可以解决的问题了。这时候,就需要用 XDP 的方式,在内核协议栈之前处理网络包;或者用 DPDK 直接跳过网络协议栈,在用户空间通过轮询的方式直接处理网络包。
作者回复: 👍,DPDK和XDP都知道,涨姿势了。
2020-03-14248 - 刘丹可以介绍一下C1M的解决方案吗?毕竟C10M很少有需求。
作者回复: 软硬结合,绕过协议栈等等
2019-10-0214 - lynetty看过它的一些源码,感觉像是倒数第二种“非阻塞 I/O + readiness notification + 多线程”。它默认有2组eventloop线程,一组是用来监听事件,叫主eventloop,监听完以后将事件发给另外一组eventloop线程,这组线程叫工作eventloop。不知道对不对,请老师点评,另外对netty很有好感,但是还没有研究好它的源码。
作者回复: 基本上是对的,我管这个叫主-从reactor模型。你可以认为netty在Linux下就是用epoll实现的。
2019-11-05210 - 程序水果宝C10M问题应该不能再通过应用层和硬件资源的优化来解决了,性能瓶颈应该是冗长的内核协议栈了,要通过已经有的解决方案有dpdk
作者回复: 是一个很好的方向。
2019-10-026 - 王盛武老师好,这就是所谓的主从 reactor 模式。 这句有疑惑,我专门查了一下,网上说的主从不是指多核多线程就是主从reactor。主从是指两个线程池,主处理accptor,从处理read write
作者回复: 两个线程池,主处理accptor,从处理read write。我指的这个。
2019-11-0635 - 张立华C10M,10个处理epoll队列的线程。 每个线程处理一个epoll队列,每个epoll队列容纳最多100万个socket
作者回复: 这个已经很猛很猛了。
2019-10-034 - Geek_68d3d2百万啊 端口已经不够用了
作者回复: 不会啊,端口还是一个服务器端口,每个客户的ip和端口不同而已。
2019-12-1453 - 阿卡牛是否使用了select poll epoll等就是非阻塞了?
作者回复: 不是的,非阻塞是指套接字类型,不是指网络事件模型,这个一定要分清楚。
2019-10-2433 - 无名tcp_wmem和tcp_rmem文件中的缓冲区值,单位是bit?不是byte吗?
作者回复: 我查了下资料,应该是byte,修正了计算的部分,等待编辑更新,感谢指正。
2019-10-173 - Geek_9adefb在服务端上:一个连接套接字需要占用一个新的端口吗? 换句话说,如果想要服务端支持1万个连接,除了进程限制的句柄数要设置到1万以上,还要不要求有1万个空闲端口?
作者回复: 不是哦。连接可用复用同一个端口。比如说1万个连接,同时建立在12345这个端口上。
2022-04-192