我最近在關於Scribd的演示文稿中看到,Facebook已經對APC的各種鎖定機制進行了基準測試,包括文件鎖(默認),IPC信號鎖,linux Futex鎖,pthread互斥鎖和自旋鎖。您可以通過單擊以下鏈接查看此演示文稿:[email protected]如何更改替代PHP緩存(APC)中的鎖定機制?
我想知道是否有人知道如果有任何源代碼已發佈,可能是在某個git或SVN存儲庫中?從默認文件鎖定切換到其他選項之一的速度好處似乎很重要。
我最近在關於Scribd的演示文稿中看到,Facebook已經對APC的各種鎖定機制進行了基準測試,包括文件鎖(默認),IPC信號鎖,linux Futex鎖,pthread互斥鎖和自旋鎖。您可以通過單擊以下鏈接查看此演示文稿:[email protected]如何更改替代PHP緩存(APC)中的鎖定機制?
我想知道是否有人知道如果有任何源代碼已發佈,可能是在某個git或SVN存儲庫中?從默認文件鎖定切換到其他選項之一的速度好處似乎很重要。
是的,它們包含在可用的源代碼http://pecl.php.net/package/APC。
請注意,您必須在編譯時更精確地選擇此選項:在./configure時間。下面是的./configure相關的選項:
--enable-apc-sem Enable semaphore locks instead of fcntl
--disable-apc-pthreadmutex Disable pthread mutex locking
--enable-apc-spinlocks Enable spin locks EXPERIMENTAL
正如你看到的,並行線程互斥鎖現在已經是默認的。
vi /etc/php.d/99_apc.ini
然後設置:
; Locking type = spinlock
extension = apc-spinlocks.so
或
; Locking type = IPC Semaphore
extension = apc-sem.so
等
嗯,當我建立3.1.9,對我來說默認爲文件鎖。在相關說明中,我遇到了以下錯誤:http://www.freshblurbs.com/apc-os-x-php-fatal-error-unknown-apc-fcntl-unlock-failed使用信號量或螺旋鎖似乎爲我工作。 – 2012-01-14 01:10:40
@QuinnTaylor你可以在編譯之前用APC 3.1.9中的這個命令修復這個問題:'sed -i .bak -e's/#define apc_lck_rdunlock(a)apc_fcntl_unlock(&a TSRMLS_CC)/ #define apc_lck_rdunlock(a) apc_fcntl_unlock(a TSRMLS_CC)/ g「apc_lock.h」 – 2012-12-17 16:01:15