??協(xié)程與線程類似,都可以處理并發(fā)任務(wù)。協(xié)程在很多語言中都支持,但 Java 中并沒有協(xié)程,而 kotlin 中是支持協(xié)程編程。
什么是協(xié)程?
??協(xié)程是一種輕量級的線程,協(xié)程提供了一種不阻塞線程但是可以被掛起的計(jì)算過程。線程阻塞的開銷是巨大的,而協(xié)程掛起基本上沒有開銷。
??在執(zhí)行阻塞任務(wù)時(shí),會(huì)將這種任務(wù)放到子線程中執(zhí)行,執(zhí)行完成回調(diào)主線程、更新UI,這就是異步編程。協(xié)程底層庫也是異步處理阻塞任務(wù),但是這些復(fù)雜的操作被底層庫封裝起來,協(xié)程代碼的程序流是順序的,不再需要一堆回調(diào)函數(shù),就像同步代碼一樣,也便于理解、調(diào)試和開發(fā)。
??線程是搶占式的,線程調(diào)度是操作系統(tǒng)級的,而協(xié)程是協(xié)作式的,協(xié)程調(diào)度是用戶級的。協(xié)程是用戶空間線程,與操作系統(tǒng)無關(guān),所以需要用戶自己去做調(diào)度。