第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

確定在Linux中讀取文件的最佳緩沖區(qū)大小

確定在Linux中讀取文件的最佳緩沖區(qū)大小

MM們 2021-04-09 14:11:59
我正在編寫一個(gè)從stdin讀取并寫入stdout的C程序。但它會(huì)緩沖數(shù)據(jù),以便僅在讀取特定數(shù)量的字節(jié)后才執(zhí)行寫操作(= SIZE)#include<stdio.h>#include<stdlib.h>#define SIZE 100int main(){        char buf[SIZE];        int n=0;        //printf("Block size = %d\n", BUFSIZ);        while( ( n = read(0, buf, sizeof(buf)) ) > 0 )                write(1, buf, n);        exit(0);}Iam在Oracle Virtual Box(4GB RAM,2個(gè)內(nèi)核)上托管的Ubuntu 18.04上運(yùn)行該程序,并測(cè)試該程序的緩沖區(qū)大小是否不同。我已經(jīng)將標(biāo)準(zhǔn)輸入重定向到來自文件(包含動(dòng)態(tài)創(chuàng)建的隨機(jī)數(shù))的文件,并將標(biāo)準(zhǔn)輸出重定向到/ dev / null。這是用于運(yùn)行測(cè)試的shell腳本:#!/bin/bash# $1 - step size  (bytes)# $2 - start size (bytes)# $3 - stop size (bytes)echo "Changing buffer size from $2 to $3 in steps of $1, and measuring time for copying."buff_size=$2echo "Test Data" >testDataecho "Step Size:(doubles from previous size) Start Size:$2 Stop Size:$3" >>testDatawhile [ $buff_size -le $3 ]do        echo "" >>testData        echo -n "$buff_size," >>testData        gcc -DSIZE=$buff_size copy.c    # Compile the program for cat, with new buffer size        dd bs=1000 count=1000000 </dev/urandom >testFile        #Create testFile with random data of 1GB                (/usr/bin/time -f "\t%U, \t%S," ./a.out <testFile 1>/dev/null) 2>>testData        buff_size=$(($buff_size * 2))        rm -f a.out        rm -f testFiledone我正在測(cè)量執(zhí)行程序并將其制成表格所需的時(shí)間。測(cè)試運(yùn)行將產(chǎn)生以下數(shù)據(jù):Test DataStep Size:(doubles from previous size) Start Size:1 Stop Size:5242881,      5.94,   17.81,2,      5.53,   18.37,4,      5.35,   18.37,8,      5.58,   18.78,16,     5.45,   18.96,32,     5.96,   19.81,64,     5.60,   18.64,128,    5.62,   17.94,256,    5.37,   18.33,512,    5.70,   18.45,1024,   5.43,   17.45,2048,   5.22,   17.95,4096,   5.57,   18.14,8192,   5.88,   17.39,16384,  5.39,   18.64,由于我們使用不同的塊大小,因此我看不到用戶+系統(tǒng)時(shí)間有任何重大變化。但是從理論上講,隨著塊大小變小,對(duì)于相同的文件大小會(huì)生成許多系統(tǒng)調(diào)用,并且執(zhí)行起來將花費(fèi)更多時(shí)間。我在理查德·史蒂文斯(Richard Stevens)的《 Unix環(huán)境中的高級(jí)編程》一書中看到了類似測(cè)試的測(cè)試結(jié)果,該結(jié)果表明,如果復(fù)制中使用的緩沖區(qū)大小接近塊大小,則用戶+系統(tǒng)時(shí)間將大大減少。 ext4分區(qū)上的塊大小為4096字節(jié))為什么我無法重現(xiàn)這些結(jié)果?我在這些測(cè)試中是否缺少一些因素?
查看完整描述

1 回答

?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

您沒有#define SIZE 100在源代碼中禁用該行,因此通過option(-DSIZE=1000)進(jìn)行的定義僅在此之上有影響#define。在我的編譯器上,我<command-line>:0:0: note: this is the location of the previous definition在編譯時(shí)收到有關(guān)此()的警告。

如果您將其注釋掉,則#define應(yīng)該可以修復(fù)此錯(cuò)誤。

我想到的另一個(gè)方面是:

如果您在計(jì)算機(jī)上創(chuàng)建文件并隨后立即讀取文件,則該文件將位于操作系統(tǒng)的磁盤緩存中(該磁盤足夠存儲(chǔ)所有文件),因此實(shí)際磁盤塊大小不會(huì)占用太多空間。影響在這里。

史蒂文斯(Stevens)的書寫于1992年,當(dāng)時(shí)RAM的價(jià)格要比今天貴得多,因此其中的某些信息可能已經(jīng)過時(shí)了。我也懷疑本書的新版本是否將此類內(nèi)容排除在外,因?yàn)榭偟膩碚f它們?nèi)匀皇钦_的。


查看完整回答
反對(duì) 回復(fù) 2021-04-16
  • 1 回答
  • 0 關(guān)注
  • 337 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)