非同步I O之檔案

2022-09-13 18:03:11 字數 1718 閱讀 5652

一、概念:

1.1、開啟裝置的操作會向作業系統傳送請求,createfile函式會直接返回,而不會去等待操作完成。

1.2、此時作業系統會發現這個請求,然後作業系統會來進行實際的操作,當操作完成之後,

1.3、會設定一些標誌,也就是通知。

1.4、在作業系統進行實際操作的時候,我可以來做一些想要做的操作,當通知來了的時候,i/o完成。

1.5、這使得我們無須等待createfile操作的完成,就能進行其他的操作。

1.6、為什麼會產生阻塞?

1.6.1、程序:程式執行的一塊空間,儲存(乙個)。

1.6.2、執行緒:程式實際執行的單位,工作,和 cpu 打交道的是執行緒(多個)。

1.7.1

、typedef

struct

ulong_ptr internal;

ulong_ptr internalhigh;

union ;

pvoid pointer;

};handle hevent;

1.8.1、使用裝置核心物件。

if (!bret && getlasterror() ==error_io_pending)

1.8.2、使用事件核心物件。

1.8.2.1、唯一的只有乙個。

1.8.2.2、所謂的核心物件都是獨立於我們的程式的,它們是屬於作業系統的。

char readbuffer[maxbyte] = ;

};readov.offset = 0

;readov.hevent = createevent(nullptr, true, false, _t("

readevent

")); //

建立了乙個事件核心物件。

readfile(hfile, readbuffer, maxbyte, nullptr, &readov); //

會直接傳送乙個請求,然後繼續往下執行。

char writebuffer[10] = ;

};writeov.offset = 0

;writeov.hevent = createevent(nullptr, true, false, _t("

writeevent

")); //

建立了乙個事件核心物件。

writefile(hfile, writebuffer, strlen(writebuffer), nullptr, &writeov); //

會直接傳送乙個請求,然後繼續往下執行。

//其他執行緒:

2] = ;

0] =readov.hevent;

1] =writeov.hevent;

while (true

)}

1.8.3、可提醒i/o。

1.8.3.1、傳送請求 -> 做自己的事情 -> 判斷請求是否完成。 非同步i/o

1.8.3.2、傳送請求 -> 完成後,作業系統提醒我。這種方式明顯的比上面的方式要好。當然這樣能不能做到呢?

1.8.3.4、可提醒i/o就是基於apc機制來做的非同步i/o操作。但並不是太好用。

1.8.3.5、雖然說可提醒i/o並不好用,但是apc機制還是很好用的。

1.8.3.6、當我們的執行緒處在可提醒狀態的話呢,執行緒就會去執行apc的**函式。

1.8.4、i/o完成埠。

1.8.4.1、概述:最為方便,也是最為科學的一種方式。

檔案IO之非同步訊號通知 signal

1.實現非同步訊號的步驟 1 在應用程式中註冊訊號sigio的處理函式 2 設定處理sigio訊號程序id,即指定訊號由哪個程序來接收 3 將檔案io模式設定為非同步模組 fasync模式 4 在驅動中與接收訊號的程序進行關聯 5 當驅動準備好資料後,向應用傳送訊號通知 2.應用程式 註冊訊號處理方...

python非同步io讀檔案 python之非同步IO

我們知道,cpu的速度遠遠快於磁碟 網路等io。在乙個執行緒中,cpu執行 的速度極快,然而,一旦遇到io操作,如讀寫檔案 傳送網路資料時,就需要等待io操作完成,才能繼續進行下一步操作。這種情況稱為同步io。在io操作的過程中,當前執行緒被掛起,而其他需要cpu執行的 就無法被當前執行緒執行了。因...

非同步IO之 APC

主題 使用readfileex和writefileex實現複製檔案的功能。1.getthreadiopendingflag 這個函式的功能是檢查執行緒還有沒有未完成的io在底層等待處理,這個等待處理和apc佇列中是否還有未處理的項是沒有關係的。2.只要apc開始執行,可定會將佇列清空才回讓等待函式返...