線程的上下文切換分爲讓步式上下文切換和搶佔式上下文切換。前者是指執行線程主動釋放CPU,與鎖競爭嚴重程度成正比,可通過減少鎖競爭來避免;後者是指線程因分配的時間片用盡而被迫放棄CPU或者被其他優先級更高的線程所搶佔,一般由於線程數大於CPU可用核心數引起,可通過調整線程數,適當減少線程數來避免。
前提:線程的上下文切換很好費性能。
如何減少:
1. 減少鎖的使用,能用CAS代替鎖的情況,儘量用CAS代替。
不是說CAS沒有線程上下文切換,只是減少了上下文切換。在多線程競爭下,加鎖、釋放鎖會導致比較多的上下文切換和調度延時,引起性能問題。而當多 個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程並不會被掛起,而是被告知這次競爭中失敗,並可以再次嘗試(只要cpu分配給線程的時間片沒有過,就可以不斷的重試,但是時間片過後,如果還是沒有成功,也會進行上下文切換,所以說只是減少了上下文切換)。
2. 減少線程的數量 。