Goコードで定期的に見られる同時実行の問題はありますか?

短い投稿で、その主な価値はコメントです(私は願っています)。

最近Goに切り替えました。これまでのところ、私は3つの問題に気づきました。

  • time.Ticker 止まらない:スキップされた行 defer tick.Stop()

  • ライブラリタイプに関するコメントは、「同時に安全」であると述べていますが、メソッドを呼び出す方法や、どのゴルーチンから呼び出すことができるかについては正確には述べていません。デフォルトは「タイプの任意のメソッドを任意のシーケンスのどこからでも呼び出すことができる」と見なすことができますが、実際には、ほとんどのスレッドセーフタイプには当てはまりません。ライフサイクル(開始-停止)があるか、セマンティクスが1つのライターのみをサポートします:ミューティングメソッドは、1つのゴルーチンのみ、または両方から呼び出すことができます。

  • ポイントは関連しており、前のポイントと部分的に重複しています。構造内にフィールドsync.Mutexがありますが、それが何を保護するか、そして最も重要な理由を説明するコメントはありません(たとえば、「これらのフィールドへのアクセスは、そのようなゴルーチンから書き込まれ、ゴルーチンから読み取られるため、保護する必要がありますnet/httpサーバー ")。



    (ドキュメンタリーのものを除いて)通常はコメントされていないgolang / goソースでも、サブパッケージ内のすべてのミューテックスにnet/は短いコメントがあることに注意してください

Go longを書いている人への質問-レビュー中、古いコードやライブラリのコードを調べているときに、定期的にどのような問題に気づきますか?



この投稿は、Redditの投稿からのクロスポスト翻訳です。




All Articles