当前位置: 首页 > 面试题库 >

细流实用程序为什么不影响动态链接的golang程序?

陆耀
2023-03-14
问题内容

我有一个golang程序,可通过https将大量数据上传到OpenStack对象存储。它依靠golang标准库"net/http"来完成工作。我想使用trickle速率来限制数据的上传,但是使用细流运行代码似乎没有任何效果(好像我根本没有使用细流)。

为什么会这样?trick流或golang是否有一些限制,阻止它们一起工作?有没有我没想到的陷阱?

这是我的设置:

我知道这trickle仅适用于动态链接的可执行文件(请参阅细流文档的第一段),因此我使用编译了代码,go build -compiler gccgo mycode.go输出ldd myexecutable为:

linux-vdso.so.1 =>  (0x00007ffee27b8000)
libgo.so.9 => /usr/lib/x86_64-linux-gnu/libgo.so.9 (0x00007f46062bf000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f46060a9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4605cdf000)
/lib64/ld-linux-x86-64.so.2 (0x000055aa4d0a4000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4605ac2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f46057b9000)

我在Ubuntu Linux
16.04上运行它。我slurm通常在命令运行时查看网络流量。该机器没有运行任何其他网络密集型工作,因此我有信心看到代码产生的流量。

当我跑步

trickle -s -v -u2500 myexecutable ...args

我看到我的TX网络流量激增到大约12000KB / s(网络可以处理的最大值),而不是遵守我的2500KB / s的限制。

谁能想到为什么会发生这种情况,或者我可以尝试解决此问题?


问题答案:

Trickle依赖于使用LD_PRELOAD来通过libc替换其自己的实现中与网络相关的所有调用。这就是为什么细流不适用于静态二进制文件。

Go直接进行自己的所有系统调用,并且不使用libc接口,因此不使用细流提供的插入函数。



 类似资料:
  • 我已经在我的设备上本地开发了一个android应用程序(应用程序还没有在android play商店上)。我有以下逻辑在主体活动中获得深度链接。 我用Firebase控制台建立了一些动态链接,并在手机浏览器中打开。但它不是打开我的应用程序并到达行字符串deepLink=appinvitereferral.getdeeplink(intent); 我在清单文件中有意图过滤器。

  • 有人试用过新的Firebase SDK for Unity吗(https://firebase.google.com/docs/unity/setup)? 当我尝试集成动态链接功能时,当有邀请时,它会使应用程序崩溃。 我创建了一个全新的项目与最低设置(https://firebase.google.com/docs/dynamic-links/unity)为Android添加动态链接到我的项目。当

  • fReceiveBuffer是否存在一个视频帧? 哦,这里是我的FFMPEG初始化代码,需要打开相关视频解码器:http://paste.ubuntu.com/12529760//

  • 我遵循了Firebase动态链接文档中的所有步骤: 已将团队Id添加到firebase控制台 已添加自定义域 启用的关联域 已添加到信息URL方案 然而,当我点击动态链接时,它总是重定向到AppStore,而不是应用程序。我已经尝试了不间断的应用程序,重新启动手机和重新安装。如何让这个深度链接发挥作用? 附注:我的应用程序还没有发布到AppStore。

  • 前言 基本概念 ELF 符号 重定位:[是将符号引用与符号定义进行链接的过程][8] 动态链接 动态链接库 动态链接器(dynamic linker/loader) 过程链接表(plt) 全局偏移表(got) 重定位表 动态链接库的创建和调用 创建动态链接库 隐式使用该库 显式使用库 动态链接过程 参考资料 前言 Linux 支持动态链接库,不仅节省了磁盘、内存空间,而且可以提高程序运行效率。不过

  • 我在YouTube上跟随编译器教程视频,当我遇到这样一个事实,即C编程语言更快,因为它允许静态链接和动态链接,但Java只允许动态链接,这就是为什么C比Java快得多。 我的问题是,如果静态链接使程序运行得更快,为什么它不包括在Java中?我知道Java的开发人员做出不包括静态链接的决定肯定有一些真正的好理由,我只是想知道原因是什么。 注意:我不知道这个问题是否已经在SO上有答案,但是因为我找不到