2013-07-03 44 views
0

是否可以模擬對Google App Engine中的一段代碼的併發訪問?我正在嘗試單元測試增加計數器的一段代碼。代碼可能會被不同的應用程序併發使用,儘管我已經使數據存儲訪問節成爲事務性的,並且還使用了memcache cas,如果有某種方法來測試它,我會感覺更好。 我已經嘗試設置後臺線程,但Testbed似乎正在爲每個線程創建一個新的環境。測試GAE中的併發訪問

回答

1

,如果它解決您的問題:)請投票

GAE就像是:

  1. 你可以有計劃的多個實例與分離代碼空間 - 意味着實例已不能訪問其他實例。
  2. 如果您將代碼標記爲線程安全,則可以在程序實例中包含多個線程 - 意味着每個實例都有權訪問相同的代碼/內存(您的計數器) - 您需要鎖定以避免衝突。
  3. Memcache是​​同步的 - 值的更新可用於所有程序及其線程 - 沒有併發的比賽 - 意味着您可以讀取最近的緩存值並跟蹤它是否在更改期間沒有更改。

如何模擬併發訪問一段代碼? - 你不應該模擬你應該在線程或程序級別使用清除鎖定 - 因爲很難模擬併發的比賽 - 不知道誰會贏得程序或線程競賽,因爲在每個環境中結果都是未定義的 - 意味着Linux,Windows,蟒蛇。

+0

我想我明白你在說什麼。我已經將所有的數據存儲訪問都包裝在事務中,並且使用了memcache cas,我​​想我只是想測試它會執行我認爲會加載的內容。 – PGower

+0

事務和CAS非常好,如果您有隨機併發失敗,請考慮使用任務。考慮線程鎖定並將變量保存在線程ID /分離的上下文中 - 您需要在線程級別分離一些全局變量以避免不可預知的問題。 – Chameleon