Trong bài nói chuyện của mình - https://blog.golang.org/concurrency-is-not-parallelism, Rob Pike nói rằng đi thói quen là tương tự như chủ đề nhưng rẻ hơn nhiều. Ai đó có thể giải thích lý do tại sao?Tại sao goroutines rẻ hơn nhiều so với các chủ đề bằng các ngôn ngữ khác?
Trả lời
Xem "How goroutines work".
Họ là rẻ hơn trong: tiêu thụ
- bộ nhớ:
Một chủ đề bắt đầu với một bộ nhớ lớn như trái ngược với một vài Kb. - Setup và teardown chi phí
(Đó là lý do tại sao bạn phải duy trì một hồ bơi của thread) - chi phí Switching
Chủ đề được dự kiến preemptively, và trong một công tắc đề, chức năng lịch cần lưu/khôi phục ALL đăng ký.
Trái ngược với Đi nơi mà thời gian chạy quản lý các goroutines trong suốt quá trình tạo để lập lịch để rách. Và số lượng đăng ký để tiết kiệm thấp hơn.
Thêm vào đó, như đã đề cập trong "Go’s march to low-latency GC", một GC là dễ dàng hơn để thực hiện khi thời gian chạy là chịu trách nhiệm về goroutines quản lý:
Kể từ sự ra đời của GC đồng thời của nó tại Gò 1.5, thời gian chạy đã theo dõi xem liệu một goroutine đã thực hiện kể từ khi ngăn xếp của nó được quét lần cuối. Giai đoạn chấm dứt nhãn hiệu sẽ kiểm tra mỗi goroutine để xem liệu nó đã chạy gần đây, và sẽ quét lại số ít đã có.
Trong Go 1.7, thời gian chạy duy trì danh sách ngắn riêng biệt của các goroutine như vậy. Điều này loại bỏ nhu cầu xem xét toàn bộ danh sách các goroutines trong khi mã người dùng bị tạm dừng và làm giảm đáng kể số lượng truy cập bộ nhớ có thể kích hoạt mã di chuyển bộ nhớ liên quan đến NUMA của hạt nhân.
- 1. Tại sao một số ngôn ngữ lập trình nhanh hơn các ngôn ngữ khác?
- 2. Tại sao Java được an toàn so với các ngôn ngữ lập trình khác?
- 3. Sử dụng C Preprocessor cho các ngôn ngữ khác hơn so với C
- 4. Tại sao các chuỗi không thay đổi được bằng nhiều ngôn ngữ lập trình?
- 5. Tại sao các nhà phát triển PHP rẻ hơn các nhà phát triển .NET?
- 6. Tại sao nhân rẻ hơn chia?
- 7. MFMailComposeViewController bằng các ngôn ngữ khác?
- 8. strtotime Với các ngôn ngữ khác nhau?
- 9. atoi() với các ngôn ngữ khác
- 10. Tại sao các ngôn ngữ động được gõ chậm?
- 11. Chức năng sao chép các mảng bằng ngôn ngữ Go
- 12. Các giải pháp/ngôn ngữ khác vượt trội so với kỳ vọng dựa trên TCL?
- 13. Tại sao python chậm hơn nhiều so với cửa sổ?
- 14. Android text to speech bằng các ngôn ngữ khác nhau
- 15. Tại sao BufferedReader đọc() chậm hơn nhiều so với readLine()?
- 16. Chủ đề có thể ngủ ít hơn nửa milli giây trong Java/Ngôn ngữ khác không?
- 17. Tốc độ Ironpython so với các ngôn ngữ khác .net như thế nào?
- 18. Thực thi thời gian chạy đệ quy Java so với các ngôn ngữ khác/chức năng?
- 19. Tại sao WebView lại nhanh hơn nhiều so với TextView
- 20. Sử dụng ngôn ngữ khác cho chế độ xem hệ thống so với ngôn ngữ thiết bị hiện tại
- 21. Tại sao C# biên dịch nhanh hơn nhiều so với C++?
- 22. Có so sánh năng lực danh sách ban đầu cho các ngôn ngữ khác nhau không?
- 23. Nhiều ngôn ngữ IDE
- 24. Tại sao cho các vòng lặp nhanh hơn nhiều so với việc nhân đôi mảng 2D
- 25. Tại sao EnumerateFiles nhanh hơn nhiều so với việc tính toán các kích thước
- 26. Chủ đề so với các quy trình trong .NET
- 27. In thời gian Epoch bằng các ngôn ngữ khác nhau
- 28. dịch một ngôn ngữ này sang ngôn ngữ khác?
- 29. Tại sao có sự khác biệt giữa các ngôn ngữ lắp ráp như Windows, Linux?
- 30. Tại sao PHP có thể tính 0.1 + 0.2 khi các ngôn ngữ khác không thành công?