0

Google App Engine 채널 API가 있지만 두 개 이상의 goroutines 및/또는 작업 대기열에서 메시지를 보내려고하면 어떻게됩니까? 예 :App Engine 채널 API의 스레드 안전성/원 자성

go channel.Send(context, clientID, "Hello") 
go channel.Send(context, clientID, "World") 

GAE Go에서는 모든 goroutine이 단일 스레드로 다중화된다는 것을 알고 있습니다. 그러나 I/O 중에는 선점 (pre-emption)이 가능하며, 채널 전송은 I/O로 한정됩니다.

GAE 개발자 서버가 모든 요청을 직렬화하는 것처럼 보이므로 중복되는 채널이 표시되지 않습니다. 프로덕션 서버는 일부 요청 동시성을 허용하는 것으로 보이지만 채널 전송은 원자 또는 최소한 다른 스레드/goroutines에서 호출하기에 안전합니다.

답변

0

일반적으로 App Engine API 호출은 동일한 메모리에 쓰지 않는 한 (예 : 동일한 대상 구조체를 사용하는 두 개의 datastore.Get 호출이 안전하지 않은 경우) 동시에 호출 할 수 있습니다.