linux非同步io
A. 關於linux下的非同步io,有幾個疑問
lsof 是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網路連接和硬體。 常用的參數列表 lsof filename 顯示打開指定文件的所有進程 lsof -a 表示兩個參數都必須滿足...
B. 如何查看linux是否開啟非同步IO
查看linux是否開啟非同步IO命令如下:
[DATA@localhost ~]$ cat /proc/slabinfo | grep kio
kioctx 37 140 384 10 1 : tunables 54 27 8 : slabdata 14 14 0
kiocb 0 0 256 15 1 : tunables 120 60 8 : slabdata 0 0 0
返回結果中kiocp對應的前兩項為0,說明系統中沒有使用非同步io。
C. 想問一下io是什麼
io是輸入輸出InputOutput。分為IO設備和IO介面兩個部分。在POSIX兼容的系統上,例如Linux系統,IO操作可以有多種方式,比如DIODirectIO,AIOAsynchronousIO,非同步IO,MemoryMappedIO內存映射IO,不同的IO方式有不同的實現方式和性能,在不同的應用中可以按情況選擇不同的IO方式。
io的作用
IO系統管理的主要對象是IO設備和相應的設備控制器。其主要作用是完成用戶的IO請求,提高IO速率,以及提高設備的利用率,並為高層的進程提供方便的介面。IO介面又稱為輸入輸出介面,是信息處理系統與外部世界之間的通信。輸入是系統接收的信號或數據,輸出是從其發送的信號或數據。
D. linux非同步IO怎麼理解
就是IO不阻塞即使沒有數據可讀,或者空間可寫時。非同步IO都返回,不管如何情況。簡單點的意思就是進程不會阻塞在你讀寫調用非同步IO系統調用的時候。所以你的執行流可以去做其它的事情,當你確實要確認數據讀寫成功的時候,你在用aio_return這個函數去判斷讀寫成功了嗎。如果你想耗費cpu那你就一值調用aio_return輪詢結果。如果想睡眠等待讀寫完成,那麼你調用aio_suspend這個函數,你就會睡眠,當讀寫完成時,內核會發信號給你,這時,就會執行信號處理函數,並喚醒此進程。要充分理解非同步IO,最好把信號和非同步通知一起搞懂。如果會寫驅動的話,最好自己去實現IO的這些功能,比如阻塞IO,非阻塞IO,輪詢,非同步通知,非同步IO等等,其中又涉及到並發和競爭的問題。
E. 什麼是「同步IO」和「非同步IO」
同步IO在同一時刻只允許一個IO操作,也就是說對於同一個文件句柄的IO操作是序列化的,即使使用兩個線程也不能同時對同一個文件句柄同時發出讀寫操作。重疊IO允許一個或多個線程同時發出IO請求。
非同步IO的概念和同步IO相對。當一個非同步過程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。在一個CPU密集型的應用中,有一些需要處理的數據可能放在磁碟上。預先知道這些數 據的位置,所以預先發起非同步IO讀請求。等到真正需要用到這些數據的時候,再等待非同步IO完成。使用了非同步IO,在發起IO請求到實際使用數據這段時間 內,程序還可以繼續做其他事情。
F. linux同步io和非同步io的區別
非同步文件IO也就是重疊IO。
在同步文件IO中,線程啟動一個IO操作然後就立即進入等待狀態,直到IO操作完成後才醒來繼續執行。而非同步文件IO方式中,線程發送一個IO請求到內核,然後繼續處理其他的事情,內核完成IO請求後,將會通知線程IO操作完成了。
如果IO請求需要大量時間執行的話,非同步文件IO方式可以顯著提高效率,因為在線程等待的這段時間內,CPU將會調度其他線程進行執行,如果沒有其他線程需要執行的話,這段時間將會浪費掉(可能會調度操作系統的零頁線程)。如果IO請求操作很快,用非同步IO方式反而還低效,還不如用同步IO方式。
同步IO在同一時刻只允許一個IO操作,也就是說對於同一個文件句柄的IO操作是序列化的,即使使用兩個線程也不能同時對同一個文件句柄同時發出讀寫操作。重疊IO允許一個或多個線程同時發出IO請求。
G. linux 非同步i/o和信號驅動i/o的區別
這里假設你指的非同步I/O是針對的文件描述符,而信號驅動IO面向的是讀寫信號本身。
比較典型的例子是select和epoll的對比。使用select之前需要預先添加你所有感興趣的文件描述符,然後再遍歷這些文件描述符,找出其中有讀寫事件的fd,之後再對這些活躍的fd做處理。相比而言,epoll會高效得多:每當有一個fd的讀寫事件,內核則把該fd添加進一個事件列表,在使用的時候你只需要去取到這個事件列表(一個鏈表的數據結構)即可做相應操作。
這樣說來,就是上面說的,一個是掃描的文件描述符再判斷該文件描述符是否需要處理,這個是fd驅動;一個是直接取到有事件發生的文件描述符,也就是信號,或者說是事件驅動。
H. 在UNIX/linux中有4中IO模型還是5種IO模型
有5種模型.
常用非同步IO的路過一下. SIGIO是需要用到信號量的, 資源太受限制. 而常說的這個非同步IO這個是操作系統底層通過fd上可都可寫的事件來進行邊緣觸發或者電平觸發, 直接進入回調函數的高效處理方法, 比如說epoll或者kqueue, 不過這個算是相對比較新的技術, 比如說epoll是linux2.6+才有的技術, 在那之前一般用的是多路復用.
I. Linux中非同步IO模型有哪些
1)阻塞I/O(blocking I/O)
2)非阻塞I/O (nonblocking I/O)
3) I/O復用(select 和poll) (I/O multiplexing)
4)信號驅動I/O (signal driven I/O (SIGIO))
5)非同步I/O (asynchronous I/O (the POSIX aio_functions))
其中前4種都是同步,最後一種才是非同步。