type Conn struct{conn net.Conn // 底層網絡連接isServer bool// 如果這個連接作為服務器端的連接則為true,如果是客戶端則為falsesubprotocol string// 代表WebSocket連接中協商的子協議// Write fields (寫操作相關字段)mu chanstruct{}// used as mutex to protect write to conn(用作互斥鎖保護對連接的寫操作)writeBuf []byte// frame is constructed in this buffer.(字節切片,用于構造要寫入的幀)writePool BufferPool // 提供和管理寫緩沖區的池writeBufSize int// 寫緩沖區的大小writeDeadline time.Time // 寫操作的截止時間writer io.WriteCloser // the current writer returned to the application(當前返回給應用程序的寫入器)isWriting bool// for best-effort concurrent write detection(用于盡最大努力檢測并發寫操作)writeErrMu sync.Mutex // 用于保護寫操作錯誤的互斥鎖writeErr error// 保存寫操作中發生的錯誤enableWriteCompression bool// 指示是否啟用寫操作壓縮compressionLevel int// 寫操作壓縮的級別newCompressionWriter func(io.WriteCloser,int) io.WriteCloser // 用于創建新的壓縮寫入器// Read fields(讀操作相關字段)reader io.ReadCloser // the current reader returned to the application (當前 返回給應用程序的讀取器)readErr error// 保存讀操作中發生的錯誤br *bufio.Reader // 帶緩沖的讀取器// bytes remaining in current frame. // set setReadRemaining to safely update this value and prevent overflowreadRemaining int64// 當前幀剩余的字節數readFinal bool// true the current message has more frames.(指示當前消息是否有更多幀)readLength int64// Message size. // 消息大小readLimit int64// Maximum message size. // 消息的最大大小readMaskPos int// 掩碼在消息中的位置readMaskKey [4]byte// 用于WebSocket消息掩碼handlePong func(string)error// 處理Pong幀的回調函數handlePing func(string)error// 處理Ping幀的回調函數handleClose func(int,string)error// 處理關閉幀的回調函數readErrCount int// 記錄讀取錯誤的次數messageReader *messageReader // the current low-level reader(當前的底層消息讀取器)readDecompress bool// whether last read frame had RSV1 set(指示最后讀取的幀是否設置了RSV1(用于壓縮))newDecompressionReader func(io.Reader) io.ReadCloser // 用于創建新的解壓縮讀取器}
之后我們來看一個關鍵的函數ReadMessage
// ReadMessage is a helper method for getting a reader using NextReader and// reading from that reader to a buffer.func(c *Conn)ReadMessage()(messageType int, p []byte, err error){var r io.ReadermessageType, r, err = c.NextReader()if err !=nil{return messageType,nil, err}p, err = io.ReadAll(r)return messageType, p, err
}
// NextReader returns the next data message received from the peer. The// returned messageType is either TextMessage or BinaryMessage.//// There can be at most one open reader on a connection. NextReader discards// the previous message if the application has not already consumed it.//// Applications must break out of the application's read loop when this method// returns a non-nil error value. Errors returned from this method are// permanent. Once this method returns a non-nil error, all subsequent calls to// this method return the same error.func(c *Conn)NextReader()(messageType int, r io.Reader, err error){// Close previous reader, only relevant for decompression.if c.reader !=nil{_= c.reader.Close()c.reader =nil}c.messageReader =nilc.readLength =0for c.readErr ==nil{frameType, err := c.advanceFrame()if err !=nil{c.readErr = errbreak}if frameType == TextMessage || frameType == BinaryMessage {c.messageReader =&messageReader{c}c.reader = c.messageReaderif c.readDecompress {c.reader = c.newDecompressionReader(c.reader)}return frameType, c.reader,nil}}// Applications that do handle the error returned from this method spin in// tight loop on connection failure. To help application developers detect// this error, panic on repeated reads to the failed connection.c.readErrCount++if c.readErrCount >=1000{panic("repeated read on failed websocket connection")}return noFrame,nil, c.readErr
}
論文題目: ReLU Strikes Back: Exploiting Activation Sparsity in Large Language Models 論文鏈接: https://arxiv.org/abs/2310.04564 參數規模超過十億(1B)的大型語言模型(LLM)已經徹底改變了現階段人工…
對fill用法的介紹
1.用鄰接矩陣實現
const int maxn100;
const int INF100000000;//無窮大,用來初始化邊
int G[maxn][maxn];//用鄰接矩陣存儲圖的信息
int isin[maxn]{false};//記錄是否已被訪問
int minDis[maxn];//記錄到頂點的最小距離void Dijkstra(int s,in…