系統(tǒng)調用
????在講解io之前某饰,先介紹下系統(tǒng)調用。系統(tǒng)調用是操作系統(tǒng)內核提供給外部訪問的最小接口善绎,運行在內核態(tài)黔漂,如果應用層需要訪問cpu、內存禀酱、io等資源時炬守,則需要訪問系統(tǒng)調用進行一些系統(tǒng)操作。比如c庫函數(shù)malloc需要分配內存剂跟,則需要從操作系統(tǒng)的用戶態(tài)切換到內核態(tài)調用sbrk系統(tǒng)調用减途。系統(tǒng)調用需要在用戶態(tài)和內核態(tài)之間來回切換酣藻,開銷較大,因此鳍置,如果程序頻繁進行系統(tǒng)調用辽剧,那么對性能的消耗可想而知。
非緩沖io
????根據《UNIX環(huán)境高級編程》一書中的解釋:不帶緩沖io指的是每個read和write都調用內核中的一個系統(tǒng)調用税产∨陆危可以看出,非緩沖io每次都會進行系統(tǒng)io辟拷,那么對于io密集型的程序撞羽,會進行頻繁的系統(tǒng)調用,性能極低衫冻。同時诀紊,需要理解,這里的緩沖指的是應用層面上的緩沖羽杰,在操作系統(tǒng)這層其實是有緩沖的渡紫,讀寫都會經過內核緩沖區(qū)。
緩沖io
????緩沖io相對于非緩沖io考赛,在應用層添加了緩沖區(qū)惕澎,應用程序在進行讀寫時,會一次性讀滿或者寫滿緩沖區(qū)颜骤,減少系統(tǒng)調用次數(shù)唧喉,極大提高程序性能。