【问题标题】:Where can I find benchmarks on different networking architectures?我在哪里可以找到不同网络架构的基准?
【发布时间】:2009-11-25 21:04:55
【问题描述】:

在哪里可以找到不同网络架构的基准?

我正在玩套接字/线程/叉子,我想知道最好的是什么。我在想一定有一个地方有人已经阐明了套接字服务不同架构的所有优缺点,列出了运行代码的基准。

最终我想用我自己的代码运行这些不同的配置,看看哪些在不同的情况下运行得最好。

与我交谈的许多人都说我应该只使用单线程选择。但是当您在线程内存储状态信息以保持代码简单时,我看到了线程的一个参数。编写我自己的状态结构与使用经过验证的线程架构的权衡是什么?

我也被告知分叉是不好的......但是当您需要在无法提高每个进程打开文件限制的机器上的 12000 个连接时,分叉是一种选择!当您有一个需要重新启动的进程时,分叉也是一个很好的稳定性选择,它不会干扰其他进程。

抱歉,这是我比较长的问题之一...很多变量都是空的。

谢谢, 陈兹

【问题讨论】:

    标签: c networking sockets multithreading fork


    【解决方案1】:

    编辑:这是我正在寻找的链接,这是回答您问题的整篇论文。 http://www.kegel.com/c10k.html

    网络服务器是按照所有三种模型(fork、thread、select)设计的。人们喜欢对 Web 服务器进行基准测试。

    http://www.lighttpd.net/benchmark

    Libevent 有一些关于如何选择 select() 与线程模型的基准和链接,通常支持使用 libevent 模型。 http://monkey.org/~provos/libevent/

    【讨论】:

      【解决方案2】:

      这个问题很难回答,因为很大程度上取决于您的服务实际在做什么。它必须查询数据库吗?从文件系统读取文件?执行复杂的计算?去和其他服务谈谈?另外,客户端连接的寿命有多长?连接可能与其他连接有一些语义交互,还是它们都被视为彼此独立?您可能想稍后考虑在多台服务器之间对您的服务进行负载平衡吗? (如果是这样,您现在可以考虑一下,以便从一开始就设计任何必要的帮助。)

      正如您所暗示的,服务机器可能存在与各种技术交互的限制,从而引导您找到一个或另一个答案。您有每个进程的文件描述符限制,但请记住,您也可能有一个固定大小的进程表!无论如何,您期望有多少并发客户端?

      如果您的服务不断崩溃并且您需要不断重新启动它,或者您认为您需要一个多进程模型以使连接彼此隔离,那么您可能做错了。在这种情况下,稳定性非常重要,这意味着良好的实践和内存卫生,无论是在一般情况下还是在面对基于网络的攻击时。

      记住历史... fork() 在 Unix 世界中很便宜,但在 Windows 上生成新进程相对昂贵。 OTOH,Windows 线程是轻量级的,而线程对于 Unix 来说总是有点陌生​​,而且直到最近才开始普及。

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        相关资源
        最近更新 更多