ホームページ  >  記事  >  バックエンド開発  >  ShrinkMap - Go の自動メモリ管理を備えた高性能同時マップ

ShrinkMap - Go の自動メモリ管理を備えた高性能同時マップ

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 21:05:03153ブラウズ

ShrinkMap - A High-Performance Concurrent Map with Automatic Memory Management for Go

ShrinkMap - Go の自動メモリ管理を備えた高性能同時マップ

ゴーファーさん、こんにちは! ?

自動メモリ管理とパフォーマンスに重点を置いた Go 用の新しい同時マップ実装である ShrinkMap を共有できることを嬉しく思います。

https://github.com/joongyunha/shrinkmap/

シュリンクマップとは何ですか?

ShrinkMap は、同時操作の高いパフォーマンスを維持しながら、未使用のエントリをクリーンアップすることでメモリを自動的に管理する、スレッドセーフなマップ実装です。これは、メモリ効率の向上が必要な場合に、sync.Map のドロップイン代替品となるように設計されています。

主な特長

  • 自動メモリ管理: メモリ リークを防ぐために、未使用のエントリを自動的に削除します
  • スレッドセーフ: ロック競合を最小限に抑えた完全に同時安全な操作
  • 高パフォーマンス: 読み取り操作と書き込み操作の両方に最適化されています
  • タイプセーフ: 完全に汎用的な実装 (Go 1.18)
  • シンプルな API: sync.Map に似た使い慣れたインターフェース

簡単な例

package main

import (
    "fmt"
    "github.com/jongyunha/shrinkmap"
)

func main() {
    // Create a new map
    sm := shrinkmap.New[string, int]()

    // Store values
    sm.Store("counter", 1)

    // Load values
    if val, ok := sm.Load("counter"); ok {
        fmt.Printf("Value: %d\n", val)
    }
}

シュリンクマップを使用する理由

sync.Map は多くのユースケースに最適ですが、メモリ管理が重要になるシナリオもあります。

  • 動的なキーと値のペアを使用した長時間実行アプリケーション
  • メモリ制限のあるシステム
  • マップ エントリのチャーンが多いアプリケーション
  • 手動クリーンアップがエラーを起こしやすい、または非現実的である場合

プロジェクトのステータス

  • GitHub リポジトリ: https://github.com/jongyunha/shrinkmap
  • ライセンス: MIT
  • Go バージョン: 1.18

フィードバックを求めています

以下についてのご意見やフィードバックをお待ちしております。

  1. メモリ管理への全体的なアプローチ
  2. API の設計と使いやすさ
  3. 現実世界のシナリオでのパフォーマンス
  4. 追加してほしい機能

貢献する

このプロジェクトは寄付を募集しています!バグレポート、機能リクエスト、コードの貢献など、すべてを歓迎します。

お気軽に:

  • 役立つと思われる場合は、リポジトリにスターを付けてください
  • バグまたは機能リクエストに関する未解決の問題
  • 改善のために PR を送信します
  • 使用例やフィードバックを共有してください

フィードバックや提案をお待ちしています!

以上がShrinkMap - Go の自動メモリ管理を備えた高性能同時マップの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。