"哪个 代理IP 地址更快——静态还是动态?
让我们做一个 0 到 60 秒的分析。
对于我们的理论场景,我们有两台计算机 A 和 B。两者都具有与硬件和软件相关的完全相同的配置。
唯一的区别是,A 有一个静态 IP,而 B 设置为通过 dhcp 获取 IP。
两个设备都连接到同一个网络交换机并尝试打开 www.espn.com。
当两个设备最初都连接到交换机时,端口协商完成后,计算机 A 可以立即请求访问该站点并加载它。另一方面,计算机 B 向 dhcp 服务器发送 IP 请求,并在获得后加载同一站点。
在这种情况下,由于静态 IP,计算机 A 赢得了快速测试。
现在,假设两台计算机都连接到网络并且已经拥有 IP 地址。我们运行相同的测试...
计算机 A 和 B 请求访问 cia.gov
两种设备几乎都立即加载了页面。这是一个平局!
它仅取决于测试何时进行。实际上您不会看到任何差异,除非 dhcp 服务器已关闭或未配置。在这种情况下,计算机 B 将继续旋转其轮子以获取 IP地址并仍然在起跑线上。
静态链接
动态链接
运行时链接
使用静态链接,链接器在构建时解析所有引用。结果是一个不依赖于任何外部库的可执行文件——它们都被复制到图像中并且引用立即到那里。
通过动态链接,库被打包为某种“迷你可执行文件”,并发布一组程序和其他库可以链接到的符号。当您将程序链接到动态库时,库不会复制到可执行文件中。相反,包含了一些蹦床代码,以确保将库加载到内存中,并在其中找到必要的符号。(这项工作已保存,因此下次调用该入口点时不会重复)。
动态库本身也由链接器生成,类似于生成可执行文件的方式。它本身可能包括静态库和动态库。(如果是静态的,要当心——你可能会得到多个副本,链接到多个库中。这不仅会浪费内存,有时还可能导致它们运行不正确)。
在 MS Windows 上,动态库的文件扩展名为 .dll。在包括 Linux 在内的许多类 unix 系统上,扩展名是 .so。
在运行时,当库被加载以解析引用时,它是通过搜索搜索路径找到的。有关详细信息,请参阅系统文档。
使用运行时链接,符号的加载和查找不是自动的,而是在程序控制下执行的。例如,应用程序可以通过加载动态库本身来支持插件(在 Windows 上使用 LoadLibrary/LoadLibraryEx 或在大多数其他系统上使用 dlopen)。然后它可以查找对应用程序具有特殊含义的符号;也许是 plugin_init()、plugin_run() 和 plugin_deinit()。这些由应用程序在适当的时间运行。
当需要避免外部依赖时使用静态链接。例如,当一个程序需要自包含以便分发时,或者如果要以 root 或其他特权用户身份运行以防止对其行为进行修改。
在支持它的系统上,动态链接通常是默认的。它提供了一些内存节省,因为如果两个应用程序加载相同的共享库,则可以共享相同的物理内存。当物理内存是一种更稀缺的资源时,这曾经更为重要。如今,代码可能只占内存使用的一小部分,而数据可能很大,共享代码可能只占总代码的一小部分,而不是过去的情况。"