2014-02-15 31 views
3

我正在使用Isolates現在想知道如果使用IndexedDB在隔離區之間共享數據是一種很好的溝通方式?具體來說,我想讓一個Isolate能夠寫入它,然後告訴其他Isolates它們可能只讀它。這些數據一旦寫入就會被認爲是不變的,並且相當大。我想這樣做的主要原因是因爲我不想將6MB Map發送給3個不同的隔離區,因爲它對程序有點密集。使用IndexedDB的隔離區之間的共享內存

回答

0

如果你想將數據存儲在IndexedDB中,無論如何這沒什麼問題。 如果你這樣做只是爲了優化溝通,我不認爲這是直接發送的改進。序列化/反序列化通常是CPU密集度最高的部分。 使用IndexedDB另外寫入一次並從慢速磁盤讀取三次。

+0

你不認爲會有緩存來提高性能?我的主要疑問是,只是在網絡工作人員之間發送意味着該程序必須在將數據發送到每個線程之前對大量數據(我的情況爲6MB Map)進行深層複製,而不是從相同的緩存參考中讀取數據。 – Salgat

+1

沒想到這一點。我會對它進行基準測試,看看哪些性能更​​好。 –

2

Web工作人員允許您在工作人員之間傳遞數組緩衝區而無需複製。但是,一旦將數組緩衝區傳遞給另一個工作人員,原始工作人員將無法訪問其內容。

因此,您可以嘗試將數據結構存儲在數組緩衝區中以利用此功能。

看到這個mdn articlehtml5rocks

因此對於Dart,將您的數據存儲在ByteData中,然後在通過dartjs編譯時,不應複製,而是轉移。注意:Mozilla也正在做一些實驗,使用多個Web工作者對陣列緩衝區進行共享可變訪問。這是爲了讓emscripten可以將多線程的c代碼編譯爲javascript。這種共享訪問可能需要一段時間才能實現標準化和廣泛實施。

+0

我還沒有看過它,但是如果引用丟失了,我不能將相同的數據發送給多個網絡工作者而不進行復制? – Salgat

+0

正確。不可能在不復制的情況下同時在多個Web工作人員中使用數據。是不是async indexedb api,一個可用於工作者,基本上只是消息傳遞存儲在單個線程/隔離/工作人員的數據,不知道爲什麼你看到indexedb作爲一個工作,因爲它會有就我所能看到的相同的限制而言。 –

+0

我希望只讀交易導致一個引用被髮送到任何要求的數據。 – Salgat

相關問題