摘要:
併發,就會出現競爭問題,下面是幾種常見的處理方式:
加鎖。所有的參與者競爭同一個鎖,持有鎖的參與者可以對資源進行操作。如果資源滿足讀和寫可以分離的條件,可以使用讀寫鎖來
提高讀的併發數量。
單執行緒順序執行。Redis的處理IO的執行...
併發,就會出現競爭問題,下面是幾種常見的處理方式:
-
加鎖。所有的參與者競爭同一個鎖,持有鎖的參與者可以對資源進行操作。如果資源滿足讀和寫可以分離的條件,可以使用讀寫鎖來
提高讀的併發數量。
-
單執行緒順序執行。Redis的處理IO的執行緒就是這樣操作的,因為Redis屬於I/O密集型應用而不是CPU密集型應用,所以雖然是單執行緒,
CPU仍然不會是效能瓶頸,單執行緒的好處就在於處理請求的時候,一個一個按順序來,所以無需加鎖,可以簡化實現。
-
原子操作。參考Go中的sync/atomic
包。使用加鎖的方式,在持有鎖的時間內,可以進行多個操作,而原則操作通常是一條語句,
例如把某個整數加上n,例如當某個數等於m時,複製為n等等。