多線(xiàn)程執(zhí)行是cpu搶占時(shí)間片的方式執(zhí)行。多線(xiàn)程創(chuàng)建并切換到另一個(gè)線(xiàn)程的過(guò)程,稱(chēng)之為線(xiàn)程的上下文切換。
如何減少上下文切換
減少上下文切換的方法有無(wú)鎖并發(fā)編程、CAS算法、使用最少線(xiàn)程和使用協(xié)程。無(wú)鎖并發(fā)編程。多線(xiàn)程競(jìng)爭(zhēng)鎖時(shí),會(huì)引起上下文切換,所以多線(xiàn)程處理數(shù)據(jù)時(shí),可以用一 些辦法來(lái)避免使用鎖,如將數(shù)據(jù)的ID按照Hash算法取模分段,不同的線(xiàn)程處理不同段的數(shù)據(jù)。
CAS算法。Java的Atomic包使用CAS算法來(lái)更新數(shù)據(jù),而不需要加鎖。
使用最少線(xiàn)程。避免創(chuàng)建不需要的線(xiàn)程,比如任務(wù)很少,但是創(chuàng)建了很多線(xiàn)程來(lái)處理,這樣會(huì)造成大量線(xiàn)程都處于等待狀態(tài)。
協(xié)程:在單線(xiàn)程里實(shí)現(xiàn)多任務(wù)的調(diào)度,并在單線(xiàn)程里維持多個(gè)任務(wù)間的切換。