我想知道在for循環中創建的通道是否可以由循環中併發運行的子例程交替使用?GO使用for循環創建的通道
僞代碼波紋管:
for i := range Map {
channel := make(chan my_type, buff_size)
go subroutine(Map[i], channel)
}
func subroutine(name valueType, channel channelType) {
//stuff here
}
有一種方法是子程序(地圖[0])例如,子程序(圖1中的for循環,即信道[的另一次迭代期間可以訪問創建的另一個信道])?
背景:我目前正在研究一個項目,我必須模擬不同的細胞種羣。每個細胞都有能力劃分/區分/等等。爲了複製真實的系統,不同的人羣必須相互並行運行。問題是,我必須在不同的人羣中工作時插入/移除特定人羣類型的細胞,這就是渠道發揮作用的地方。我正在考慮同時處理每個人都有相關頻道的人羣。這就是爲什麼我問我們是否可以使用在不同的循環迭代中創建的通道。
我希望人們明白我在問什麼。
謝謝!
編輯:我決定添加一些我的代碼來支持我的CONTEXT描述和解釋不同元素的註釋。我收錄了頻道,但我不知道它是否有效。我希望它有助於理解什麼是我想要做的事:
func main() {
//where envMap is a map[int]Population and Population is a struct
envMap := initialiseEnvironment(envSetupInfo)
//general simulation loop
for i := 0; i < 10; i++ {
//loop to go through all envMap elements in parallel
for eachKey := range envMap {
channel := make(chan type)
go simulateEnv(envMap[eachKey])
}
}
}
func simulateEnv(cellPopulation Population, channel chan) {
//each Population has a map[int]Cell where Cell is a struct with cell properties
cellMap := cellPopulation.cellMap
for eachCell := range cellMap {
go divisionTransition(eachCell, channel)
}
}
你有沒有編寫任何代碼,但你可以顯示?你所要求的並不合理。你的代碼中的各種goroutines如何訪問其他渠道而不參考它們? – JimB
我正在模塊化我的代碼的過程中,即將特定的功能放在它們各自的功能中。我問了這個問題,因爲我很難用這個思路「可視化」系統工作的算法,我想如果我和那些瞭解渠道行爲的人討論過,也許會幫助我以及如何使用它們。我會稍後更新這個問題。 – sSmacKk
您可以引入一個控制通道和一個控制例程來處理interroutine通信,而不是所有能夠相互引用的例程。 –