• ly
    2019-11-05
    netty看过它的一些源码,感觉像是倒数第二种“非阻塞 I/O + readiness notification + 多线程”。它默认有2组eventloop线程,一组是用来监听事件,叫主eventloop,监听完以后将事件发给另外一组eventloop线程,这组线程叫工作eventloop。不知道对不对,请老师点评,另外对netty很有好感,但是还没有研究好它的源码。

    作者回复: 基本上是对的,我管这个叫主-从reactor模型。你可以认为netty在Linux下就是用epoll实现的。

     1
     4
  • 刘丹
    2019-10-02
    可以介绍一下C1M的解决方案吗?毕竟C10M很少有需求。

    作者回复: 软硬结合,绕过协议栈等等

    
     2
  • 传说中的成大大
    2019-10-10
    补充一句 还有带宽限制
    
     1
  • 传说中的成大大
    2019-10-10
    这篇课程虽然全是理论 但是我不知道为啥还是认认真真的读了两遍才去看问题和写评论,感觉这篇文章的理论基础很承上启下啊
    这里直接回答第二问 实现应该是能实现 挑战和瓶颈在于 首先操作系统方面能否支持千万级别数量的套接字,其次内存方面 能否有足够的内存提供千万级别的套接字读缓冲区和写缓冲区, 第三内核能否同时处理千万级别描述符的事件 第四应用层方面虽然采用了线程池减少了线程的创建开销,但是如果同时在线的连接数量还是很大的话 线程的切换和调度也会很耗性能,大概能想到这些问题
     1
     1
  • 张立华
    2019-10-03
    C10M,10个处理epoll队列的线程。 每个线程处理一个epoll队列,每个epoll队列容纳最多100万个socket

    作者回复: 这个已经很猛很猛了。

    
     1
  • 程序水果宝
    2019-10-02
    C10M问题应该不能再通过应用层和硬件资源的优化来解决了,性能瓶颈应该是冗长的内核协议栈了,要通过已经有的解决方案有dpdk

    作者回复: 是一个很好的方向。

    
     1
  • Geek_68d3d2
    2019-12-14
    百万啊 端口已经不够用了

    作者回复: 不会啊,端口还是一个服务器端口,每个客户的ip和端口不同而已。

     1
    
  • 有铭
    2019-12-10
    看过一些关于C10M的资料,说到Unix(Linux)本身是为电话机交换设计的系统,在内核上存在一些局限性,如果想达到10M,必须像协程取代线程那样,摆脱内核,完全由程序自身机制来控制。但是具体的实现是啥样,我貌似没见人做出来过

    作者回复: 这个说法有点牵强。

    
    
  • godtrue
    2019-11-24
    这篇好,承上启下,问题解决方案的发展轨迹也勾勒了出来。
    C10K,第一次读到这个词,不知道啥意思,嘿嘿,现在明白啦!
    C10K=C+10K=Concurrty+10*1000,是指单台物理机如何能同时支持1万并发连接的问题,C10M问题同理

    面对的问题估计是类似的,内存够不够?带宽够不够?网络响应是否及时?

    值得反复看
    展开
    
    
  • 林林
    2019-11-22
    上面提到的主从处理,主和从能否分别是不同的进程?acceptor进程通过消息队列把监听到的新连接fd发到reader进程进行读写操作?

    作者回复: 也不是不可以,实战中很少有人这么干,因为一般都是一个进程处理了所有accept和I/O事件。

    
    
  • 西兹兹
    2019-11-06
    老师好,这就是所谓的主从 reactor 模式。 这句有疑惑,我专门查了一下,网上说的主从不是指多核多线程就是主从reactor。主从是指两个线程池,主处理accptor,从处理read write

    作者回复: 两个线程池,主处理accptor,从处理read write。我指的这个。

     1
    
  • GeekAmI
    2019-10-29
    Netty是用的“非阻塞 I/O + readiness notification + 多线程”。
    当serverBootstrap.channel(NioServerSocketChannel.class)时,用的poll事件分发器;
    当serverBootstrap.channel(EpollServerSocketChannel.class)时,用的epoll事件分发器。
    ps:BioServerSocketChannel一般不考虑。

    作者回复: Netty还自己用epoll实现了一把封装,也是拼了。

    
    
  • 阿卡牛
    2019-10-24
    文中假设每个连接每秒的传输速率1KB是否离现实情况太远了?

    作者回复: 嗯,似乎是,你觉得合理的值是多少?1M?10M?

    
    
  • 阿卡牛
    2019-10-24
    是否使用了select poll epoll等就是非阻塞了?

    作者回复: 不是的,非阻塞是指套接字类型,不是指网络事件模型,这个一定要分清楚。

     1
    
  • 徐凯
    2019-10-22
    在哪些地方会有C10M的出现呢,会有千万级同时在线的公司,服务器不都是分布式的,分配到每个服务器上连接应该不至于太多把,可以让那些用户连接的时候通过keepalive模块进行负载均衡,返回新的节点地址让它去连,这样用户请求就不至于都积压到一块去了。

    作者回复: 你说的方法确实大家也都在使用,但是,人们探索未来、解决疑难问题的欲望是无止境的,具体到C10M,说实话,单机到这种规模确实罕见,这是人们从C10K往下求索的一个自然延伸吧。

    
    
  • 无名
    2019-10-17
    tcp_wmem和tcp_rmem文件中的缓冲区值,单位是bit?不是byte吗?

    作者回复: 我查了下资料,应该是byte,修正了计算的部分,等待编辑更新,感谢指正。

    
    
  • 衬衫的价格是19美元
    2019-10-04
    c10M的话,前面分析的缓存大小和带宽分别要放大1000倍,也就是,需要1.2 * 1000 = 1.2T的内存,80Mbps *1000 = 80Gbps 的带宽, 同时,连接数也要达到10000000
    
    
我们在线,来聊聊吧