System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請涉及跨進程通信,具體涉及一種跨進程的數據零拷貝方法及裝置。
技術介紹
1、在非實時操作系統中,系統分為內核空間和用戶空間,當進程間需要交換數據時,通常采用零拷貝(zero-copy)的方式,減少數據在內核空間和用戶空間之間的拷貝次數,以此來提高數據傳輸的效率。由于在進程通信時,對內核空間和用戶空間的訪問速度存在要求,因此,通常采用共享內存的方式來實現零拷貝。
2、現有的共享內存方法通常采用分配大塊內存,再將分配的內容分成定長小內存塊的模式來進行管理,當進程通信時,根據實際情況從各內存塊中選取適合的內存塊作為共享內存,在通信結束后釋放被調用的內存塊,以便下次使用。
3、但是,由于現有的共享內存方法在進程通信開始時就確定了內存塊的大小,當進程要傳遞的數據量發生變動時,系統需要先釋放原有內存塊后,再重新分配新的內存塊,且由于內存塊大小固定,為了滿足大數據量的傳輸需求,可能需要多次分配,這極大地降低了進程間數據傳輸的速度。
技術實現思路
1、本申請提供一種跨進程的數據零拷貝方法及裝置,可以減少因傳輸數據量變動而釋放和重新分配內存塊的次數,進而提高進程間數據傳輸的速度。
2、第一方面,本申請實施例提供一種跨進程的數據零拷貝方法,所述方法包括:
3、第一進程啟動時,創建共享內存,將所述共享內存劃分為多個容量不同的內存塊;
4、兩個進程間數據傳遞時,根據初次傳遞的數據量在所述共享內存中匹配對應容量的內存塊;
5、當本次
6、當本次傳遞的數據量多于上次傳遞的數據量、且不超過預設的第一容量時,根據本次傳遞的數據量在所述共享內存中匹配對應容量的第一內存塊,并將當前使用的內存塊的內容拷貝至第一內存塊,隨后釋放當前使用的內存塊。
7、結合第一方面,在一種實施方式中,所述第一進程啟動時,創建共享內存,包括:
8、當第一進程啟動時,將第一進程切換至內核態,操作系統基于所述第一進程的id創建共享內存;
9、將所述第一進程切換至用戶態,將所述共享內存映射至用戶空間。
10、結合第一方面,在一種實施方式中,將所述共享內存劃分為多個容量不同的內存塊后,還包括:
11、將所述多個容量不同的內存塊組織為環形隊列。
12、結合第一方面,在一種實施方式中,所述根據初次傳遞的數據量在所述共享內存中匹配對應容量的內存塊,包括:
13、遍歷所述環形隊列,判斷是否存在容量等于傳遞的數據量的第二內存塊;
14、若是,將第二內存塊作為初次傳遞所使用的內存塊,并從所述環形隊列中移除第二內存塊;
15、若否,向操作系統申請容量等于傳遞的數據量的第三內存塊,將第三內存塊作為初次傳遞所使用的內存塊并加入所述環形隊列。
16、結合第一方面,在一種實施方式中,釋放內存塊的過程,包括:
17、將內存塊添加至所述環形隊列的尾指針所指向的位置。
18、結合第一方面,在一種實施方式中,還包括:
19、在每次數據傳遞結束后,若兩個進程結束通信,則釋放當前使用的內存塊。
20、結合第一方面,在一種實施方式中,還包括:
21、當本次傳遞的數據量超過所述預設的第一容量時,向操作系統申請容量等于本次傳遞的數據量的第四內存塊;
22、將當前使用的內存塊的內容拷貝至第四內存塊,隨后釋放當前使用的內存塊。
23、結合第一方面,在一種實施方式中,還包括:
24、在每次數據傳遞結束后,若當前使用的內存塊的容量超過所述預設的第一容量,操作系統回收當前使用的內存塊。
25、結合第一方面,在一種實施方式中,所述操作系統回收當前使用的內存塊,包括:
26、判斷當前使用的內存塊的溢出標記的值是否被更改;
27、若是,操作系統在預設的錯誤日志上記錄本次數據傳遞的時間戳和上下文信息,隨后回收該內存塊;
28、若否,操作系統回收該內存塊。
29、第二方面,本申請實施例提供了一種跨進程的數據零拷貝裝置,其特征在于,所述裝置包括:
30、構造模塊,用于第一進程啟動時,創建共享內存,將所述共享內存劃分為多個容量不同的內存塊;
31、分配模塊,用于兩個進程間數據傳遞時,根據初次傳遞的數據量在所述共享內存中匹配對應容量的內存塊;
32、更新模塊,用于當本次傳遞的數據量少于上次傳遞的數據量時,更新當前使用的內存塊的使用長度和溢出標記;還用于當本次傳遞的數據量多于上次傳遞的數據量且不超過預設的第一容量時,根據本次傳遞的數據量在所述共享內存中匹配對應容量的第一內存塊,并將當前使用的內存塊的內容拷貝至第一內存塊,隨后釋放當前使用的內存塊。
33、本申請實施例提供的技術方案帶來的有益效果包括:
34、通過在傳輸的數據量減少時,更新正在使用的內存塊的使用長度和溢出標記,減少內存的釋放次數;在傳輸的數據量增加時,直接分配適合當前數據量的內存塊,避免因大容量內存需求而多次分配固定小容量的內存。結合以上兩種方式,減少了因傳輸數據量變動而釋放和重新分配內存塊的次數,從而提高了進程間數據傳輸的速度。
本文檔來自技高網...【技術保護點】
1.一種跨進程的數據零拷貝方法,其特征在于,所述方法包括:
2.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,所述第一進程啟動時,創建共享內存,包括:
3.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,將所述共享內存劃分為多個容量不同的內存塊后,還包括:
4.如權利要求3所述的跨進程的數據零拷貝方法,其特征在于,所述根據初次傳遞的數據量在所述共享內存中匹配對應容量的內存塊,包括:
5.如權利要求3所述的跨進程的數據零拷貝方法,其特征在于,釋放內存塊的過程,包括:
6.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,還包括:
7.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,還包括:
8.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,還包括:
9.如權利要求8所述的跨進程的數據零拷貝方法,其特征在于,所述操作系統回收當前使用的內存塊,包括:
10.一種基于權利要求1-9任一項所述方法的跨進程的數據零拷貝裝置,其特征在于,所述裝置包括:
...【技術特征摘要】
1.一種跨進程的數據零拷貝方法,其特征在于,所述方法包括:
2.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,所述第一進程啟動時,創建共享內存,包括:
3.如權利要求1所述的跨進程的數據零拷貝方法,其特征在于,將所述共享內存劃分為多個容量不同的內存塊后,還包括:
4.如權利要求3所述的跨進程的數據零拷貝方法,其特征在于,所述根據初次傳遞的數據量在所述共享內存中匹配對應容量的內存塊,包括:
5.如權利要求3所述的跨進程的數據零拷貝方法,其...
【專利技術屬性】
技術研發人員:孫育寧,張敏,梁凱淋,許慶巍,
申請(專利權)人:深圳市閃聯信息技術有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。