Kotlin corutines là đường cho máy trạng thái hữu hạn và một số nhân viên nhiệm vụ (ví dụ, mặc định ForkJoinPool). https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md#implementation-detailsLoại coroutines nào (goroutines và kotlin coroutines) nhanh hơn?
Nói cách khác, không có thời gian chạy coroutines trong thời gian chạy java/kotlin (nhưng điều này có thể thay đổi với http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html). Kotlin coroutine chỉ là tuần tự các nhiệm vụ, được thực hiện từng cái một. Mỗi tác vụ có thể được thực hiện trong bất kỳ luồng nào từ nhóm luồng.
Thời gian chạy hỗ trợ "coroutines". Nhưng goroutines không phải là coroutines thực sự. Goroutines không cho phép đặt điểm lợi nhuận trong chương trình. Ngoài ra, Go không cho phép đặt nhóm chủ đề tùy chỉnh. Bạn có thể chỉ đặt kích thước của chuỗi trong nhóm mặc định.
Sự khác biệt đầu tiên giữa corotines kotlin và goroutines là thời gian chạy quản lý coroutine đang chạy tại thời điểm này. Khi goroutine bị chặn tại một số hoạt động IO (hoặc đồng bộ hóa nguyên thủy), Go lựa chọn tiếp theo Công việc để thực hiện nó. Trong JVM không có chuyển đổi công việc trí tuệ trong các điều khoản như vậy.
Vì lý do này, Go có thể thay đổi công việc hiện đang chạy với giá rẻ. Go chỉ thay đổi vài đăng ký https://groups.google.com/forum/#!msg/golang-nuts/j51G7ieoKh4/wxNaKkFEfvcJ. Nhưng một số người nói rằng, JVM có thể sử dụng chồng chủ đề thay vì sử dụng thanh ghi. Vì vậy, không có tiết kiệm và tải đăng ký ở tất cả.
Sự khác biệt thứ hai giữa kotlin coroutines và goroutines là loại coroutines. Corryines Kotlin là coroutines stackless. Goroutines là các coroutines xếp chồng lên nhau. Tất cả các trạng thái của các coroutines Kotlin được lưu trữ trong bối cảnh Kotlin, được lưu trữ trong đống. Trạng thái Goroutines được lưu trữ trong thanh ghi và ngăn xếp luồng.
Tôi muốn biết, coroutines nào (goroutines và kotlin coroutines) nhanh hơn trong các nhiệm vụ ràng buộc IO? Các nhiệm vụ ràng buộc CPU? Điều gì về tiêu thụ bộ nhớ?
Sự khác biệt giữa "coroutines xếp chồng lên nhau" và "corodines không có ngăn xếp" không được xác định và khắc phục. Xem phần nói chuyện JVMLS của tôi để biết chi tiết: https://www.youtube.com/watch?v=3xalVUY69Ok –