http://blog.golang.org/go-and-google-app-engineGolang,App Engine的,渠道和線程安全
「此外,雖然夠程和渠道都存在,當轉到應用程序在App Engine上只運行一個線程在給定的情況下運行。也就是說,所有夠程在一個單一的操作系統線程中運行,所以可用於給定的客戶端請求沒有CPU的並行性。我們預計這一限制將在某個時候」
那是在2011年5月是否仍然如此被取消?
我有一個應用程序,它什麼也不做,但利用Golang的速度;接收一些輸入數據,對其執行內存計算,返回結果。切勿觸摸數據存儲區或任何其他App Engine API。
我需要的應用程序進行大量的運算,最好有一定程度的並行化的。因爲我是一個Golang noob,我只是編碼算法,沒有任何思想線程安全。當我一次發送一個請求時,這很好,但當我嘗試並行發送多個計算時,所有結果都是錯誤的。我懷疑,但不知道100%,即線程安全性問題,尤其作爲算法中使用地圖和地圖都不是線程安全的
http://golang.org/doc/faq#atomic_maps
所以。如何使我的算法線程安全並獲得某種程度的並行性。
的第一個想法是使用渠道,這似乎是線程安全的:
Is it possible to use Go's buffered channel as a thread-safe queue?
但後來我遇到的鏈接來到頂部這表明通道可能無法使用。
所以..如果他們沒有,也許我需要建立一個任務隊列只可以同時執行一個計算的計算。
有人可以賜教上實現一定程度上Golang App Engine的線程安全的平行執行的最佳模式?
謝謝。
不知道是不是這樣,但即使使用GOMAXPROCS = 1,任何全局變量仍然可以被多個goroutine更新。如果你真的不需要全局變量來協調多個任務,那麼就不要再把它們變成全局的了 - 也許把它們移動到你按照請求分配的結構中。這個問題是一個非常籠統的描述,所以很難多說。 – twotwotwo 2014-09-05 18:23:59