# Syncの実装を通して見る、既定実装と否定実装 simple_redis の Clientの実装について、 APIドキュメントの下にある Auto Trait Implementations にて下記のような記述がある。 ```rust= // Auto Trait Implementations impl Send for Client impl !Sync for Client ``` # 参考 https://qnighy.hatenablog.com/entry/2017/03/21/070000 ## 既定実装 - auto impl - dafault impl とも言う Opt-in Builtin Traits で規定される機能 言語の組み込みとは限らないマーカートレイトをオプトアウト方式で実装できるようにする機能 ## ! の意味 ! が意味するのは 否定 Syncの実装は negative であるということ ## 特別なトレイト SyncとSendは特別なトレイトである ここに少し書いてある https://doc.rust-lang.org/reference/special-types-and-traits.html#clone # Auto traits SendとSyncは Auto traitである。 Auto traitとは、明示的な実装もしくは、 **ネガティブ実装が書かれていないとき** コンパイラが規則に従って自動的に実装するというもの。 - 基本的に、ジェネリックTを内包するときは T の SendやSyncに従って実装する。 # Negative implementation ```rust= impl !AutoTrait for T ``` AutoTraitには、 Send, Sync, UnwindSafem RefUnwindSafe のいづれかが入る 否定実装されている自動トレイトは、自動的に実装されない。 # まとめ 要するに、simple_redisには Sync が実装されていないということ。 マルチスレッドで安全に共有することができないので、 Mutex や RwLock が作れない。 simple_redis を使うと、マルチスレッドでコネクションをいちいちするので、 redisの負荷が増えそう。 基本的に、DBへの接続、切断を繰り返すプログラムはパフォーマンスが悪くなる。 コネクションプールを使えば性能劣化を抑えられたりはする。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up