• Maxwell
    2019-02-20
    一台机器不是只有65536个端口吗,每个网络请求都需要消耗一个端口,这样大于65536个请求会不会导致端口不够用呢?

    作者回复: 如果是只有一个IP地址的客户端,那的确是受限于端口数量。

    不过,如果是服务器端,那可以接受的连接就多得多了(组合客户端IP+端口)。

    
     16
  • 双
    2019-04-08
    select/poll是LT模式,epoll缺省使用的也是水平触发模式(LT)。
    目前业界对于ET的最佳实践大概就是Nginx了,单线程redis也是使用的LT
    说下我对水平触发(LT)和边缘触发(ET)我的理解。
    LT:文件描述符准备就绪时(FD关联的读缓冲区不为空,可读。写缓冲区还没满,可写),触发通知。
    也就是你文中表述的"只要文件描述符可以非阻塞地执行 I/O ,就会触发通知..."
    ET:当FD关联的缓冲区发生变化时(例如:读缓冲区由空变为非空,有新数据达到,可读。写缓冲区满变有空间了,有数据被发送走,可写),触发通知,仅此一次
    也就是你文中表述的"只有在文件描述符的状态发生改变(也就是 I/O 请求达到)时"

    展开
    
     13
  • 挺直腰板
    2019-03-31
    老师,很多人都说并发数不能超过65536,假如访问服务器80端口,服务器ip是183.3.226.35这个,客户端ip是58.62.30.2,超过65536端口如何显示,是这样183.3.226.35 58.62.30.2:80?单机最大并发的连接数据是多少?谢谢!

    作者回复: 注意区分客户端还是服务器端:客户端使用单个IP去访问服务器的时候,端口号数是最大限制;服务器端没有这个限制。

     1
     6
  • Days
    2019-02-11
    总结:通过对C10K 和 C100K案例分析,总结了常见的IO模型实现框架,比较基础知识补充!
    
     4
  • 涛涛
    2019-04-28
    10k并发:epoll+线程池;
    100K:增加物理资源;
    1000k:更高的系统优化(软件的功能交给专业硬件);
    10mk:dpdx xdp
    
     3
  • AI杜嘉嘉
    2019-02-22
    老师,您好。我看IO模型这块老提到文件描述符,这个跟IO模型有啥关系呢?

    作者回复: 还记得虚拟文件系统(VFS)吧,使用套接字接口的时候,也是要分配一个文件描述符,然后后续所有的I/O都通过这个文件描述符来操作(包括IO模型中要判断可读写状态)。

    
     2
  • 小花
    2019-09-02
    一个请求16kb,请问这个是怎么预估出来,或者任意一个请求,我如何判断它的大小?
    
     1
  • zzyalbert
    2019-08-27
    为什么select是o(n^2)poll是o(n)?
    
     1
  • 深海极光
    2019-03-19
    老师你好,您说到epoll 的边缘触发只在文件描述符可读或可写事件发生时才通知,那么应用程序就需要尽可能多地执行 I/O,并要处理更多的异常事件,我有点不理解这个多执行IO是为什么?是指有一个文件描述符也就是链接可读或者可写时就通知应用程序一次,那么有100个链接同时都可读,就通知应用程序100次吗,应用程序拿到这100个都是可读的。并没有多的IO执行啥,还请老师解惑,谢谢!

    作者回复: 因为一次读有可能不会读到所有数据,但这种情况不会有新的事件通知了

    
     1
  • 科学Jia
    2019-03-04
    老师,问题1: DPDK和XDP,是不是在qps不能上去的情况下都可以采用的方案?问题2:DPDK和XDP是linux需要额外配置的工具么?

    作者回复: 是的,都需要额外的开发

    
     1
  • 我来也
    2019-02-12
    [D35打卡]
    09年那会,我所在公司的服务器端都是单进程+select.
    后来把select换为了poll和epoll.
    再后来还拆分成了多进程,N个网络收发层+M个业务处理层.
    毕竟我们的情况是 业务处理的耗时远大于网络收发的耗时.
    目前的网络收发层也只支持最大65530个并发连接,毕竟是单ip单端口的.
    如果想支持更多并发连接,就另外再开一个进程.
    并没有往C100K甚至是C1000K的方向上努力了.
    展开

    作者回复: 其实并不是 65530,Linux使用五元组标志一个连接:协议、源IP、源端口、目的IP、目的端口。根据这些,你可以算下理论上最大支持的连接数。

     1
     1
  • Aoser
    2020-01-10
    老师关于IO模型中,I/O多路复用,本身不是阻塞型I/O吗?比不过相比之前阻塞在了select和poll上
    
    
  • GeekCoder
    2019-08-21
    想问一下c10,c1000k,c10m这些都是基于什么服务器配置?比如怎么样的服务器实现了

    作者回复: c10k对服务器要求很低,甚至个人开发机都可以;c10m对硬件有一些要求,比如需要支持dpdk的网卡

    
    
  • JJj
    2019-07-06
    请问下在 poll内部,检查套接字状态不是用轮询方法吗?为什么时间复杂度是O(N)

    作者回复: poll需要轮询查询每个fd的状态,所以时间复杂度是O(N),N是fd的个数

    
    
  • k
    2019-07-03
    那性价比最高的C1000K方案是不是epoll多线程+dpdk?这样好像也不需要对硬件进行过多的优化

    作者回复: 嗯嗯,其实DPDK本身就包含了大量的软硬件优化

    
    
  • GaelYang
    2019-07-02
    原文中 C10K 和 C1000K 的首字母 C 是 Client的缩写。
    C可能是concurrtently 的缩写 ?

    作者回复: 都可以

    
    
  • bigzuo
    2019-06-20
    内容非常赞!
    
    
  • A孙其成
    2019-06-06
    到了硬骨头了,网络不太懂,努力学习
    
    
  • kubxy
    2019-05-27
    老师,我是疑问是TCP连接和HTTP请求的关系,一万并发请求需要建立一万个TCP连接吗?即一个TCP连接同一个时间点只能发送一个HTTP请求,是这样吗?

    作者回复: HTTP2支持多路复用

    
    
  • 懵懂的Java
    2019-05-24
    老师你好,前段再多的请求数,如果后段数据库连接池设置的很小比如200最多并发不也就是200吗,不知道我理解的对不对

    作者回复: 不对,不是每个请求都会直接发送给数据库

    
    
我们在线,来聊聊吧