我對IO完成端口完成時實際發生的事情感到有點困惑。在完成端口有什麼要報告之前或之後,IO完成端口是否產生新的線程?
我猜想贏API允許訪問的IOCP隊列,不知怎的,能夠隊列(或堆棧)與特定的手柄回調引用(比方說,一個插座)。 當Windows在某些時候接收來自NIC的中斷,那麼它到達IOCP隊列網卡和其自己(IOCP)線程池執行回調。
我的問題是,該線程是從接收到中斷時產生的線程池中產生的,還是實際上在調用Win API時產生的線程,實際上等待線程處於等待狀態由IOCP隊列喚醒?
編輯:
我發現這一點:http://msmvps.com/blogs/luisabreu/archive/2009/06/04/multithreading-i-o-and-the-thread-pool.aspx哪裏是狀態:「每當操作完成後,將隊列I/O完成端口的數據包則端口將繼續,並且使用線程之一。池的線程來運行你指定的回調。「
只是爲了說明問題,這是一個關於重疊IO如何管理事件通知*事件*接收到IOCP用戶管理線程池的問題,是否正確? – WhozCraig
不是。這是一個關於是否在端口有一些IO(在這種情況下它們被阻塞)之前創建IOCP創建的線程的問題,或者在端口有一些IO要報告時創建的線程。 – kasperhj
這是不是很清楚你在說什麼。中斷由驅動程序處理。重要的是你的代碼使用GetQueuedCompletionStatus()還是後面的CreateThreadPoolIo()。在第一種情況下,你創建了tp線程。在最後一種情況下,Windows在重疊的I/O完成時創建它。 –