Bu PHP 5.2.9 de sysvsem.c gelen alakalı C kod parçacığını:
/* setup string-variable and serialize */
/* get serialized variable from shared memory */
shm_varpos = php_check_shm_data((shm_list_ptr->ptr), key);
if (shm_varpos < 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable key %ld doesn't exist", key);
RETURN_FALSE;
}
shm_var = (sysvshm_chunk*) ((char *)shm_list_ptr->ptr + shm_varpos);
shm_data = &shm_var->mem;
PHP_VAR_UNSERIALIZE_INIT(var_hash);
if (php_var_unserialize(&return_value, (const unsigned char **) &shm_data, shm_data + shm_var->length, &var_hash TSRMLS_CC) != 1) {
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable data in shared memory is corrupted");
RETURN_FALSE;
}
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
PHP tüm değer, bir 50MB dizisinde, gerçekten yavaş olacak size shm_get aramak her zaman, unserialize zorunda kalacak.
Nasıl bireysel değerleri içine kesiliyor hakkında?
Ayrıca paylaşılan hafızanın tümünü idare edecek APC değişken önbelleğini kullanarak ve sizin için kilitleme düşünebilirsiniz (ve aynı zamanda anahtar aramaları için bir karma tablo kullanacağız)