我必須從電路板讀取數據,以非常高的速度生成數據。我必須快速讀取這些數據,解析並寫入另一個文件。由於讀取操作的速度非常快,我必須在C++中實現兩個線程。這樣一個線程可以讀取數據,另一個線程可以將數據寫入文件。由於讀取和寫入緩衝區相同,所以不能使用鎖定機制。使用環形緩衝區來實現並不是一個好的解決方案。任何其他想法在C++中實現它不會降低讀取速度?如何在C++中以非常高的速度讀取和寫入數據?
回答
映射兩個文件在內存中。使用大小等於頁面大小倍數的較大的讀取和寫入緩衝區。在新文件中使用異步內存寫入。啓動兩個線程,一個讀取,另一個寫入。在兩個線程之間建立通信消息,以便在讀取新文件部分時,將其可用性傳遞給第二個線程。同時,你在第二個緩衝區中讀取文件的新部分,解析和寫入線程可能與其緩衝區一起工作。完成此分析和寫入操作後,將其傳遞給第一個線程以便重新使用此緩衝區。
與乒乓緩衝區是否相同? – indira 2012-03-12 12:36:03
這取決於解析速度。如果速度夠快,可以使用純乒乓緩衝區。如果不是,則使用第二個讀取緩衝區,並從一個讀取緩衝區切換到第二個讀取緩衝區。整個實際的處理速度是解析和寫入速度。所以,試着改進它。即使你可以使用多個解析線程。 – 2012-03-12 13:19:36
通常最好讓操作系統處理所有的優化。因此,我會使用某種mmap工具 - Linux/Unix上的mmap(2)系統調用或Win32上的MemoryMapOfFile。
這樣做會指示操作系統使用常規虛擬內存子系統將文件視爲內存位置。這意味着系統以全球最佳方式管理緩衝,並且通常被認爲是最佳的。
這是一個很好的深思:
我會建議使用condition variable信號作家有準備他的緩衝區。將緩衝區的引用放入隊列也很方便,因此作者可以處理多個緩衝區。
注意,如果數據的處理速度超過了它的處理速度,那麼在某些時候會出現擁塞。
- 1. 如何讀取和寫入有關在android中的加速度計的數據?
- 2. 在C#中讀取和寫入非常大的文本文件
- 3. 在iPad上核心數據讀取速度非常慢
- 4. SharedPreferences讀取和寫入速度
- 5. 如何在C#中以非常快的速度將雙精度數組寫入文件?
- 6. 以寫入訪問速度爲代價實現非常快的讀取訪問的數據庫模式
- 7. Memcached寫入速度非常慢
- 8. 如何讀取,替換和寫入非常大的文件?
- 9. 讀取和寫入圖像數據C++
- 10. 如何提高將clob數據寫入文件的速度
- 11. 如何提高Postgresql的數據讀取速度
- 12. 如何在c#或C++中讀取/寫入xmp元數據
- 13. 在Firebase中讀取和寫入數據
- 14. 寫入和讀取數據
- 15. 如何在Java中以非常快的速度從文件中檢索數據
- 16. 使用緩衝寫入/讀取器提高讀取和寫入大文件的速度
- 17. 如何從C#中的SQL數據讀取器高效地寫入文件?
- 18. 文件讀取/寫入速度
- 19. 速度來創建和讀取數據
- 20. 獲取閃存驅動器的讀取和寫入速度
- 21. C++如何讀取和寫入文件
- 22. ios在UDP中以高速讀取數據
- 23. 如何從C++中的數據文件讀取/寫入
- 24. 讀取和寫入數據在陣列
- 25. 在C中寫入和讀取結構?
- 26. 在C#中讀取和寫入扇區#
- 27. 在C++中讀取和寫入文件
- 28. 使用FD_SET讀取和寫入數據集以發送和接收數據C
- 29. 在C中嵌入C以提高速度
- 30. 在c#和java套接字之間讀取和寫入數據
當你寫入另一個文件時,讀寫緩衝區是否相同? – UmNyobe 2012-03-12 12:06:20
你說什麼樣的速度?要小心,磁盤速度很慢,除非你有像SSD,RAID等特殊硬件......並且請提及你的操作系統。 – 2012-03-12 12:07:57
板卡生成10mbps的數據。我的操作系統是Windows – indira 2012-03-12 12:18:17