擅长:python、mysql、java
<p>由于TCP拥塞控制的工作方式,一次发送所有数据更有效。TCP维护一个窗口,显示它允许多少数据“在空中”(已发送但尚未确认)。TCP测量返回的确认信息,以计算在不造成拥塞(即,数据包丢失)的情况下,它可以“在空中”有多少数据。如果应用程序没有足够的数据来填充窗口,TCP就不能进行精确的测量,所以它会保守地缩小窗口。在</p>
<p>如果您只有几个小标题,并且您对<code>send</code>的调用是快速连续的,操作系统通常会为您缓冲数据,并在一个数据包中全部发送。在这种情况下,TCP拥塞控制并不是真正的问题。但是,对<code>send</code>的每次调用都涉及从用户模式到内核模式的上下文切换,这会增加CPU开销。换句话说,最好还是在应用程序中进行缓冲。在</p>
<p>(至少)有一种情况下你最好不用缓冲:当你的缓冲区比上下文切换开销慢。如果用Python编写一个复杂的缓冲区,很可能就是这样。用CPython编写的缓冲区将比内核中经过优化的缓冲区慢很多。很有可能缓冲会花费你更多的钱。在</p>
<p>有疑问时,量度。在</p>
<p>不过,需要提醒的是:过早的优化是万恶之源。这里的效率差别很小。如果您还没有确定这是应用程序的一个瓶颈,那么就去做那些让您的生活更轻松的事情。你可以以后再改。在</p>