nginx的高并發性能,衆人皆知。如果是我們自己寫的伺服器軟體,能做到這樣的高并發嗎?昨天我接着上次的代碼繼續讀,看到源碼包目錄src/os/unix/ngx_writev_chain.c檔案,在108行有這樣一個函數,如圖1:

圖 1
從函數名字了解,我隻知道,這個函數跟寫操作有關系,類似于write函數,但是這兩個的差別,我并不知道。既然Igor Sysoev把它用在了這裡,說明從性能方面考慮,它是優于write函數的。作為研究,我google,明白了write的用法,下面是一個小執行個體:
函數:
ssize_t readv(int fd, const struct iovec *iov, int iovcnt);
ssize_t writev(int fd, const struct iovec *iov, int iovcnt);
說明:readv和writev函數用于在一次函數調用中讀、寫多個非連續緩沖區。
執行個體:
測試檔案:
1.txt
2.txt
3.txt #檔案3.txt是空的。
測試程式:
編譯運作:
分析:
檔案1.txt和檔案2.txt中的内容被讀到buf1、buf2緩沖區,然後writev以順序iov[0]至iov[iovcnt-1]從緩沖區中聚集輸寫資料到檔案3.txt,傳回值為所有緩沖區長度值和,此處為18。1.txt中9個字元;2.txt中9個字元。
博友學會了嗎?當你自己編寫軟體的時候,不妨嘗試着用一下。