有個問題想和大家討論下,在iocp編程模型中,如果有多個IO執行緒,其中一個執行緒一次投遞多個recv操作那等到有資料到達時應該是只有次執行緒在getqueuedcompletionstats中會回傳吧,也就是相應的投遞通知只能相應的發送請求的執行緒得到通知,我的理解沒錯吧
uj5u.com熱心網友回復:
有個問題想和大家討論下,在iocp編程模型中,如果有多個IO執行緒,其中一個執行緒一次投遞多個recv操作那等到有資料到達時應該是只有發送相應投遞呼叫的執行緒在getcopstats中會回傳吧(即使另一個執行緒也做了相同的操作),也就是相應的投遞通知只能相應的發送請求的執行緒得到通知,比如A執行緒發送投遞接受對方的前10k的資料此時另一個執行緒在同一個套接字上再發送接受發送者后15k資料的recv呼叫(假設A執行緒先投遞完成,B執行緒后投遞完成,且都處于pend狀態),那等完成佇列中有資料后第一個先滿足A執行緒的請求,即使只有少于10k的資料到達。然后A 中getqueuedcompletionstats回傳,緊接著投遞下一個recv,此時執行緒B的recv請求還沒有收到資料。等過一會后有資料了,此時在呼叫getqueuedcompletionstats的A B兩個執行緒只有B才能收到資料并回傳,即使此時A是在運行中的狀態。我的理解沒問題吧uj5u.com熱心網友回復:
沒有人能夠回答嗎,還是沒有人能很好的理解IOCP的機制,大家可以探討啊uj5u.com熱心網友回復:
iocp任意執行緒投遞異步recv, 任意執行緒都可以getqueuedcompletionstats 來獲取完成通知訊息。uj5u.com熱心網友回復:
iocp編程模型中不存在多次投遞recv請求的情況吧?第二次及以后的recv應該接收不到東西uj5u.com熱心網友回復:
謝謝你的回答,之前也看過你在其他帖子回答過這方面的問題。這個問題通過查找資料確實是你說的這種情況不是我理解的那樣,但我現在還有一個問題,對與一個或多個io作業系統能保證他們按照操作的順序完成,但為什么接受通知的時候不一定能按操作的順序收到通知呢
uj5u.com熱心網友回復:
你的回答可看可不看,以后建議你不要在其他人的帖子中回答問題
uj5u.com熱心網友回復:
當然不是了,除非后面沒有資料了
uj5u.com熱心網友回復:
我說的不存在多次投遞recv請求指的是多次連續的投遞recv請求
都是先投遞一個recv請求,資料到達后,進入回呼函式,回呼函式里收取到所有的資料后,根據個人的需求,要么發送一條資料給對方,然后再投遞recv請求,準備接收下一組資料,要么進行其他操作。
如果對方和你沒有互動,源源不斷的發資料,那么還是只需要投遞一個recv請求,在這個recv請求的回呼函式里收取所有的資料,socket不會發送一包資料,給你發送多個“資料已經到達”的訊息的。
uj5u.com熱心網友回復:
如果對方分多次發資料,接收方也是先投遞一個recv請求,在回呼函式里接收第一包資料,然后再投遞下一個recv請求,接收第二包資料uj5u.com熱心網友回復:
如果對方分多次發資料,接收方也是先投遞一個recv請求,在回呼函式里接收第一包資料,然后再投遞下一個recv請求,接收第二包資料
你說的這種情況也可以正確處理資料,我說的情況和你是不一樣的,同一個套接字上多個請求
uj5u.com熱心網友回復:
百度搜“HP-SOCKET”
你的回答可看可不看,以后建議你不要在其他人的帖子中回答問題
https://bbs.csdn.net/topics/392372284
uj5u.com熱心網友回復:
《Windows核心編程》uj5u.com熱心網友回復:
《Windows核心編程》
不要讓我看書,如果你看過的話可以直接回答我的問題嘛
uj5u.com熱心網友回復:
沒有人能夠回答嗎轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/68638.html
標籤:網絡編程
上一篇:windbg結果求幫助分析
