Murcy 2017-06-26 13:05 采纳率: 0%
浏览 1157

自己写的网络库吞吐量很低怎么提高性能

看了《UNP》和陈硕的muduo,自己用C++写了个简单版本的面向对象的Reactor非阻塞网络库,但是吞吐量只有陈硕老师的十分之一。
测试程序是pingpong程序,测试环境是双核4线程,单线程下我的吞吐量只有120MiB/s左右,陈硕老师的pingpong能达到1500,
而且,muduo在多线程时性能提升明显,而我的稳定在120(保证已将连接分发到子线程)。
请问有哪些可能的原因?

  • 写回答

1条回答 默认 最新

  • 小杰911 2023-06-15 14:43
    关注

    有可能的原因如下:

    1. 网络库的实现方式不同:《UNP》和陈硕的muduo采用了高级的技术如epoll和eventfd等,而你实现的网络库可能采用了比较简单的技术,这会导致性能上的差距。

    2. 线程模型不同:陈硕的muduo采用了一个线程池的模型,可以充分利用多核CPU的性能,而你的网络库可能只是一个单线程或者多线程的模型,这也会对性能产生影响。

    3. 代码实现的质量不同:陈硕老师的muduo是经过多年实践和优化的成熟网络库,代码实现的质量和性能都非常高,而你实现的网络库可能还需要进一步优化和改进。

    4. 测试环境不同:测试环境的硬件和软件配置也可能对测试结果产生影响,例如CPU的型号、内存大小、操作系统的版本等等。

    需要进一步分析和调优才能提高性能。

    可以从以下几个方面入手来提高网络库的性能:

    1. 采用更高级的技术:可以考虑采用更高级的技术如epoll和eventfd等,这些技术可以提高网络库的性能。

    2. 优化线程模型:可以采用线程池的模型,充分利用多核CPU的性能。同时,可以考虑采用更合理的线程数量,以及更优秀的线程调度算法。

    3. 优化代码实现:可以进行代码层面的优化,例如减少内存分配和拷贝等操作,优化数据结构和算法等。

    4. 增加缓存:可以增加缓存来减少网络IO的次数,例如可以采用内存池来管理内存。

    5. 调整测试环境:可以调整测试环境的硬件和软件配置,例如升级CPU、加大内存等等。

    需要根据具体情况进行分析和调优,同时也需要进行性能测试和评估,以确保性能的提升。

    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容