0

Google App Engine の Channel API を使用してメッセージを送信しようとしましたが、2 つ以上のゴルーチンやタスク キューから送信された場合はどうなりますか? 例えば

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

GAE Go では、すべてのゴルーチンが 1 つのスレッドに多重化されていることを理解しています。ただし、これでも I/O 中のプリエンプションが可能であり、おそらくチャネル送信は I/O として認定されます。

GAE 開発サーバーはすべての要求をシリアル化するように見えるので、重複するチャネル送信は見られません。本番サーバーはリクエストの同時実行を許可しているようですが、チャネル送信はアトミックであるか、少なくとも異なるスレッド/ゴルーチンから安全に呼び出すことができます。

4

1 に答える 1

0

一般に、App Engine API 呼び出しは、同じメモリに書き込むことがない限り、同時に呼び出しても問題ありません (たとえば、同じ宛先構造体を使用した 2 つの datastore.Get 呼び出しは安全ではありません)。

于 2013-09-10T01:10:35.080 に答える