2010-05-07 10 views
9

Tôi đã có kiến ​​thức rất hạn chế về Erlang, nhưng theo như tôi hiểu, nó có thể sinh ra "quy trình" với chi phí rất thấp.Quy trình Erlang đằng sau hậu trường là gì?

Vì vậy, tôi tự hỏi, những "quy trình" đó là gì?

Chúng có phải là sợi không? Chủ đề? Tiếp tục?

+0

liên quan: http://stackoverflow.com/questions/1934707/what-other-systems-beside-erlang-are-based-on-green-processes – jldupont

+0

related: http://stackoverflow.com/questions/1947180/whats-the-sự khác biệt-giữa-xanh-chủ đề-và-erlangs-quy trình – jldupont

Trả lời

3

Ngoài ra, từ doc Erlang:

quá trình Erlang là nhẹ (phát triển và thu nhỏ tự động) với bộ nhớ nhỏ, nhanh chóng để tạo ra và chấm dứt và việc lập lịch overhead thấp.

Nguồn: http://www.erlang.org/doc/reference_manual/processes.html

Bạn cũng có thể muốn có một cái nhìn như thế này:

http://www.defmacro.org/ramblings/concurrency.html

Khi nói về quá trình Erlang, nó nói:

quá trình Erlang có trọng lượng nhẹ là chủ đề. Chúng rất rẻ để bắt đầu lên và phá hủy và rất nhanh chóng để chuyển đổi giữa vì dưới mui xe chúng chỉ đơn giản là chức năng. Một hệ thống E2ang điển hình chạy trên một máy tính để bàn hiện đại có thể chuyển đổi giữa nhiều hàng chục nghìn quy trình như vậy. Quy trình được chuyển sang mỗi một số tá các cuộc gọi chức năng làm cho các công tắc ít chi tiết hơn nhưng tiết kiệm được khoảng thời gian to lớn bình thường bị lãng phí khi chuyển ngữ cảnh.

+0

Vậy điều này khác với sợi như thế nào? –

+0

Ví dụ, Ruby Fibers không thể chạy đồng thời trên các lõi/CPU khác nhau (theo như tôi biết, sửa tôi nếu tôi sai), trong khi Erlang rất giỏi ở đó. –

+0

Đó không phải là giới hạn của Ruby? Bạn có thể tạo các sợi từ/trong chuỗi trong win32. và do đó nó không phải là bất kỳ vấn đề để làm cho họ chạy trên nhiều lõi? –

-10

Về cơ bản chúng là Chủ đề;) Một không gian địa chỉ cho chúng.

+0

Không có họ không. Các luồng quá nặng để thực hiện các quy trình Erlang. (Tôi đã không downvote, btw.) –

+0

Vì vậy, họ hoàn toàn được mô phỏng bởi timesharing một sợi? Xin lỗi, âm thanh ridiculo9us không hiệu quả trong những lần máy tính có nhiều hơn một lõi;) – TomTom

+0

Erlang SMP là một luồng cho mỗi lõi CPU. Máy ảo Erlang cung cấp mỗi tiến trình với một không gian địa chỉ riêng biệt, ipc và timesharing. – cthulahoops

1

tôi đã không tìm thấy một nguồn dứt khoát, nhưng từ những gì tôi hiểu:

  • Có một lịch trình (ví dụ hoặc nhiều schedulers rằng hành động hợp tác) mà xác định erlang quá trình để khởi động trên mà OS chủ đề.

  • Các quy trình này có ngăn xếp có thể phát triển (có thể là phần mở đầu trong mỗi chức năng phân bổ ngăn xếp nếu cần) để chúng không tiêu thụ quá nhiều bộ nhớ trừ khi chúng cần.

  • Họ mang lại cho lịch trình tùy thuộc vào việc họ chờ đợi vào dữ liệu hoặc đã thực hiện cho một lượng vừa đủ thời gian (mã có lẽ lời mở đầu trong một số chức năng sẽ kiểm tra xem có bao nhiêu thời gian đã trôi qua ). Không giống như chủ đề, họ không nhận được preempted?

  • Mỗi quá trình cấp phát bộ nhớ từ các trang khác nhau hoặc từ một cấp khác nhau , vì vậy nó không thể chia sẻ bộ nhớ (trong cách tương tự như quá trình OS tránh chia sẻ bộ nhớ).

  • Có lẽ cũng có allocators hoặc trang mỗi quá trình erlang riêng cũng sẽ giúp với thu gom rác thải, và trong trường hợp đó quá trình này kết thúc, thì trang có thể được trả lại mà không cần phải làm bất cứ thu gom rác thải: http://prog21.dadgum.com/16.html