<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>bigfish的网络博客 - 性能</title>
      <link>https://blog.bigfisharc.cn</link>
      <description>记录技术和生活</description>
      <generator>Zola</generator>
      <language>zh</language>
      <atom:link href="https://blog.bigfisharc.cn/tags/xing-neng/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 11 Oct 2026 23:18:00 +0800</lastBuildDate>
      <item>
          <title>Go 和 Rust 性能谁更快？一次 HTTP 实测告诉你差距在哪里</title>
          <pubDate>Sun, 11 Oct 2026 23:18:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.bigfisharc.cn/blog/go-rust-http-performance-benchmark/</link>
          <guid>https://blog.bigfisharc.cn/blog/go-rust-http-performance-benchmark/</guid>
          <description xml:base="https://blog.bigfisharc.cn/blog/go-rust-http-performance-benchmark/">&lt;p&gt;Go 和 Rust 做同一个 HTTP 服务，谁能处理更多请求？这次实测的答案不是一句“Rust 更快”就能概括：在 5,000 个连接下，Rust 的固定文本吞吐高 78.2%，JSON 序列化高 85.8%；但把主要工作换成固定 CPU 计算后，两端只差约 1%。连接数继续增加，Go 的默认配置还会先遇到 OOM，而设置内存软上限后，问题又变成延迟超标。&lt;/p&gt;
&lt;p&gt;这篇文章整理一次 Go 与 Rust HTTP 服务的公平复测，重点看四件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在相同资源和负载下，吞吐与 P99 尾延迟差多少；&lt;/li&gt;
&lt;li&gt;JSON 工作是否会放大两套实现的差异；&lt;/li&gt;
&lt;li&gt;更多连接是在提高并发，还是只是在制造排队；&lt;/li&gt;
&lt;li&gt;Go 的内存策略改变后，原本的 OOM 结论还是否成立。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先把结论说窄：在本次 1 个逻辑 CPU、512 MiB 内存的测试环境中，Rust 版本在轻量 HTTP 和 JSON 场景中明显领先；固定 CPU 计算场景则几乎打平。Go 在高连接数下的默认配置会 OOM，但设置 &lt;code&gt;GOMEMLIMIT=384MiB&lt;/code&gt; 后，15,000 连接可以稳定完成测试，20,000 连接仍然超过延迟目标。&lt;/p&gt;
&lt;p&gt;这些结论只适用于本次实现、依赖、负载和运行环境，不能直接变成“Rust 在所有服务中都比 Go 快”的语言排名。&lt;/p&gt;</description>
      </item>
      <item>
          <title>一行代码引发的性能暴跌 10 倍</title>
          <pubDate>Thu, 11 Mar 2021 10:00:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.bigfisharc.cn/blog/java-object-performance/</link>
          <guid>https://blog.bigfisharc.cn/blog/java-object-performance/</guid>
          <description xml:base="https://blog.bigfisharc.cn/blog/java-object-performance/">&lt;h2 id=&quot;dai-ma-ce-shi&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dai-ma-ce-shi&quot; aria-label=&quot;Anchor link for: dai-ma-ce-shi&quot;&gt;代码测试&lt;/a&gt;&lt;/h2&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;java&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; com&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;common&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;base&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Stopwatch&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;import&lt;/span&gt;&lt;span&gt; java&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;util&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;concurrent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;TimeUnit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt; class&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; StackTest&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    public&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt; static&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt; void&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt;String&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-10&quot;&gt; args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8&quot;&gt;        Stopwatch&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; started&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; Stopwatch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3&quot;&gt;        started&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;start&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8&quot;&gt;        User&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; user&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-2&quot;&gt; null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt;        for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt;long&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; i&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-7 z-d-2&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-7 z-d-2&quot;&gt; 1000_000_000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;++&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            user &lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt; new&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; User&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3&quot;&gt;        started&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;stop&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-3&quot;&gt;        System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;out&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;started&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt;elapsed&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;TimeUnit&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;MILLISECONDS&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; +&lt;/span&gt;&lt;span class=&quot;z-l-12 z-d-5&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-12 z-d-5&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;z-l-12 z-d-5&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;不加打印 300ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;加了打印 3000ms&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-4&quot;&gt;        System.out.println(user);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; User&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    private&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt; int&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; age&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    private&lt;/span&gt;&lt;span class=&quot;z-l-8&quot;&gt; String&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt; userName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    public&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt; int&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; getAge&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt;        return&lt;/span&gt;&lt;span&gt; age&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    public&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt; void&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; setAge&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-10&quot;&gt; age&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-2&quot;&gt;        this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;age&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; =&lt;/span&gt;&lt;span&gt; age&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    public&lt;/span&gt;&lt;span class=&quot;z-l-8&quot;&gt; String&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; getUserName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-13 z-d-8&quot;&gt;        return&lt;/span&gt;&lt;span&gt; userName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-8&quot;&gt;    public&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-8&quot;&gt; void&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-6&quot;&gt; setUserName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-8&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;z-l-3 z-d-10&quot;&gt; userName&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-2&quot;&gt;        this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-3&quot;&gt;userName&lt;/span&gt;&lt;span class=&quot;z-d-8&quot;&gt; =&lt;/span&gt;&lt;span&gt; userName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
    </channel>
</rss>
