for 루프에서 생성 된 채널이 for 루프에서 동시에 실행되는 서브 루틴에 의해 상호 교환 가능하게 사용될 수 있는지 궁금합니다. 노호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
}
이 방법은 서브 루틴이 있었다는 MAP ([0]), 예를 들어, 서브 루틴의 forloop 즉 채널 (맵 [(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)
}
}
아직 코드를 작성 했습니까? 당신이 묻는 것은 실제로 의미가 없습니다. 코드에있는 다양한 goroutine은 다른 채널을 참조하지 않고 어떻게 다른 채널에 액세스합니까? – JimB
나는 자신의 코드를 모듈화하는 과정에있다. 즉, 각각의 기능에 특정 기능을 넣는 것이다. 나는이 문제에 대해 물었습니다. 왜냐하면 저는이 사고 방식을 사용하여 시스템이 어떻게 작동하는지 알고리즘을 "시각화"하는 데 어려움을 겪고 있기 때문에 채널의 행동을 아는 사람들과 토론을하면 도움이 될 것이라고 생각했습니다. 그리고 그것들을 어떻게 사용할 수 있는지에 대해 설명합니다. 질문을 적절하게 업데이트 할 것입니다. – sSmacKk
모든 루틴이 서로 참조 할 수있는 것이 아니라 인터럽트 통신을 처리하는 제어 루틴과 제어 루틴을 도입 할 수 있습니다. –