3

apc_store と apc_add の違いは理解していますが、どちらを使用してもパフォーマンスが向上するのでしょうか?

挿入を行う前に存在する場合のチェックを行う必要がないため、apc_store の方が少し速いと考える人もいるでしょう。

私の考えは正しいですか?

または、エントリが存在しないことが確実にわかっている状況で apc_add を使用すると、少し速くなるでしょうか?

4

1 に答える 1

0

短い:apc_store()よりもわずかに遅くなるはずですapc_add()

より長い: 2 つの間の唯一の違いは、 にexclusive渡されるフラグであり、apc_store_helper()その結果、 の動作が異なりapc_cache_insert()ます。

そこで何が起こるかは次のとおりです。

if (((*slot)->key.h == key.h) && (!memcmp((*slot)->key.str, key.str, key.len))) {
    if(exclusive) {
        if (!(*slot)->value->ttl || (time_t) ((*slot)->ctime + (*slot)->value->ttl) >= t) {
            goto nothing;
        }
    }
    // THIS IS THE MAIN DIFFERENCE
    apc_cache_remove_slot(cache, slot TSRMLS_CC);**
    break;
} else 
    if((cache->ttl && (time_t)(*slot)->atime < (t - (time_t)cache->ttl)) || 
        ((*slot)->value->ttl && (time_t) ((*slot)->ctime + (*slot)->value->ttl) < t)) {
        apc_cache_remove_slot(cache, slot TSRMLS_CC);
        continue;
    }

    slot = &(*slot)->next;      
}

if ((*slot = make_slot(cache, &key, value, *slot, t TSRMLS_CC)) != NULL) {
    value->mem_size = ctxt->pool->size;

    cache->header->mem_size += ctxt->pool->size;
    cache->header->nentries++;
    cache->header->ninserts++;
} else {
    goto nothing;
}

主な違いはapc_add()、値が既に存在する場合、1 つのスロットの削除を節約できることです。実世界のベンチマークは、その分析を確認するために明らかに非常に理にかなっています.

于 2014-07-05T21:46:32.267 に答える