2017-01-28 13 views

Trả lời

4

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.

Các vấn đề liên quan