2015-12-27 88 views
0

在主線程和從線程之間共享只讀數據的理想方法是什麼?根據我的理解,有兩種選擇:在kdb中在主線程和從線程之間共享數據

  1. 將共享數據設置爲全局變量,以便從屬線程可以讀取它們。
  2. 將共享變量傳遞給從線程作爲參數。

從我的實驗中,即使對於大數據集,性能也幾乎沒有任何差異。事實上,1)比2)的表現略差。我知道對於2),kdb會序列化和序列化參數。它是否與1)相同?這將解釋考慮到全局變量的大小大於線程特定參數的性能下降。有沒有其他方法可以做到這一點?其次,作爲從線程不能修改全局變量。我認爲與主線程共享結果的唯一方法是將其返回。如果不是這樣,請評論。

編輯:性能是根據運行前後調用桃來衡量的。

回答

0

通過桃值傳遞給函數這樣

{}[v;] peach vector

聽起來不錯,而且效果很好,除非v是非常大的。每個線程都得到一個副本(即使v是全局的)。

所以答案取決於你的用例。你有足夠的內存嗎?你能承擔給定的線程數內存副本?如果答案是肯定的,那麼你可以在沒有太多不良影響的情況下做到這一點(記住分配會影響時間)。

我更喜歡使用全局變量來解決這個問題。

+0

好的。使用全局變量會對性能產生影響嗎?就我而言,當我使用全局變量時,我反而看到性能下降。我的程序不受內存限制。全局變量是否可以複製到每個線程堆?或者是否存在從各個線程訪問主線程堆中定義的全局變量的巨大成本?它涉及到序列化? – user5637363

+0

沒有全局變量不被複制AFAIK,訪問全局變量應該非常快。你如何衡量性能下降?你能用一個例子更新你的問題來複制嗎? –

+0

我正在測量程序的簡單運行時間,在調用桃子之前和之後,考慮開始和結束時間之間的差異。我將嘗試創建一個示例。 – user5637363