日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux IO模型漫谈(1)

發布時間:2025/4/16 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux IO模型漫谈(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎知識

Linux將所有外部設備都看做一個文件來進行操作。因此,linux對所有外部設備的操作都可以看做是文件的操作。文件的操作當然需要有個標示描述它,這就是文件描述符(file descriptor)。

linux的IO操作如何形象理解呢?

我們說網絡socket的read()是一個IO操作命令,具體流程是這樣的:

應用程序調用read命令,通知內核需要做讀取數據操作

內核創建一個文件描述符

內核從物理層收到讀數據的命令,從網絡中獲取數據包

數據包傳遞到TCP/IP層,解析數據包的頭

內核將數據包緩存在文件描述符的讀緩存區(接受緩存區)中,注意這里的讀緩存區是在內核中的

當文件描述符讀緩存區數據字節數大于應用程序定義的低水位的時候(read的一個參數),此時文件描述符處于讀就緒的狀態

將讀緩存區中的數據復制到應用程序(用戶區)返回

這里需要說明的是

1 每個文件描述符都有自己的讀緩沖區和寫緩沖區,讀緩沖區對應的是read操作,寫緩沖區對應的就是write操作了

2 讀緩沖區和寫緩沖區都是在內核區中

IO模型

現有的linux IO模型有5種:

阻塞式IO模型,非阻塞式IO模型,IO復用模型,信號驅動式IO模型,異步IO模型

經常弄不清楚的就是阻塞,非阻塞,異步,同步

說明一下

上圖給出的同步異步標準是:數據描述符緩存是由誰來進行讀取的?由用戶程序讀取,則判斷為同步;由內核推送,判斷為異步

上圖給出的阻塞非阻塞標準是:調用的用戶進程是否是阻塞的狀態

這里關于這五種IO模型的阻塞同步狀態有很多種說法,比較有爭議的是IO復用模型和信號驅動IO模型的判斷分類上,推薦這一種判斷:

關于IO的同步、異步、阻塞、非阻塞






本文轉自軒脈刃博客園博客,原文鏈接:http://www.cnblogs.com/yjf512/archive/2012/05/29/2523692.html,如需轉載請自行聯系原作者


總結

以上是生活随笔為你收集整理的Linux IO模型漫谈(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。