dql123000 2015-12-04 09:53
浏览 51

对golang中net / http上连接源代码的怀疑

I am learning source code about golang , at the source code create new connection for each request in net/http, like:

// Create new connection from rwc.
func (srv *Server) newConn(rwc net.Conn) (c *conn, err error) {
    c = new(conn)
    c.remoteAddr = rwc.RemoteAddr().String()
    c.server = srv
    c.rwc = rwc
    c.w = rwc
    if debugServerConnections {
        c.rwc = newLoggingConn("server", c.rwc)
    }
    c.sr.r = c.rwc
    c.lr = io.LimitReader(&c.sr, noLimit).(*io.LimitedReader)
    br := newBufioReader(c.lr)
    bw := newBufioWriterSize(checkConnErrorWriter{c}, 4<<10)
    c.buf = bufio.NewReadWriter(br, bw)
    return c, nil
}

why new(conn) at this place, is there can improve performance do with get conn from sync.Pool

  • 写回答

1条回答 默认 最新

  • doukenqiong0588 2015-12-04 10:45
    关注

    Does this question stem from measuring performance of an application or simply, as the title implies, from reading the source code? The basic rule of performance optimisation is "measure, don't guess" (see, for example, this article).

    Apart from performance, there may be a good reason for not using sync.Pool here. You would need to know at what point the connection is no longer used and can safely be put back in the pool.

    That said, your suggestion may have some merit if it is obvious at what point(s) in the code the connection needs to be returned to the pool. Why not measure the performance improvement for a (realistic if small) application that could benefit? If there's a really significant benefit, it might be worth proposing to the Go community. However, the main benefit of sync.Pool is to reduce GC overhead, so the application would have to create many connections for there to be a noticeable benefit.

    评论

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算