Erlang chiếu sáng cho các ứng dụng I/O-ràng buộc, tức là các vấn đề có yếu tố hạn chế là độ trễ và thông lượng của các hoạt động I/O thay vì tốc độ hướng dẫn có thể được đẩy thông qua một đường ống CPU. Các máy chủ và cơ sở dữ liệu web là những ví dụ tốt về các ứng dụng I/O-bound: các yếu tố giới hạn có thể là đĩa và mạng chứ không phải là CPU. Các ứng dụng "tính toán nặng" truyền thống bao gồm các công cụ mã hóa và mô phỏng khoa học.
Là tại sao Erlang không phù hợp với các ngôn ngữ như C và Fortran khi nói đến tính toán các vấn đề chuyên sâu, chúng ta phải xem xét những thứ như thế hệ mã và bộ nhớ cache thân thiện ... Tôi sẽ cung cấp cho nó một thử:
- Tạo mã: Thông thường khi bạn bắt đầu chương trình Erlang, chương trình sẽ chạy ở BEAM, virtual machine dựa trên threaded code. Trong khi BEAM thực hiện đủ tốt cho hầu hết các mục đích, nó có chi phí cao hơn nhiều cho mỗi lệnh "logic" hơn là loại mã được tạo ra bởi trình biên dịch C tối ưu hóa hiện đại. Dự án HiPE cung cấp trình biên dịch mã gốc cho Erlang được tích hợp vào cây nguồn OTP chính vài năm trước *. Trong khi nó chắc chắn cải thiện khả năng crunching số của Erlang, nó vẫn sẽ có một thời gian khó khăn phù hợp với một chương trình C hay Fortran được viết tốt.
- Thân thiện với bộ nhớ cache: Hệ thống bộ nhớ là một nút cổ chai lớn trong các máy tính hiện đại: đọc từ bộ nhớ chính có thể mất hàng trăm chu trình xử lý! Để giải quyết vấn đề này, các nhà thiết kế CPU giới thiệu một số mức cache để ẩn độ trễ của bộ nhớ. Bộ nhớ cache khai thác hai thuộc tính chính của chương trình máy tính: tạm thời và không gian địa phương - nghĩa là vùng bộ nhớ gần đây được tham chiếu (và các vùng lân cận) có thể được tham chiếu lại. Các ngôn ngữ như C và Fortran cung cấp rất nhiều quyền kiểm soát đối với vị trí và cách thức phân bổ bộ nhớ, cho phép lập trình viên điều chỉnh các thuật toán để chơi độc đáo với bộ đệm. Điều tương tự thường không giữ cho các ngôn ngữ động như Erlang, nơi cấp phát bộ nhớ bị ẩn khỏi lập trình viên và được xử lý tự động bởi máy ảo.
- Kích thước mã: Đối số về địa phương không gian cũng giữ mã; Mã Erlang, dù ở dạng gốc hay mã byte, thường sẽ lớn hơn mã C đã biên dịch tương ứng. Điều này dẫn đến việc thường xuyên bị bỏ sót trong bộ nhớ cache lệnh.
Hãy nhớ rằng đây chỉ là đỉnh của tảng băng trôi, và rằng tôi không có nghĩa là chuyên gia về Erlang hoặc thực hiện ngôn ngữ. Đừng để thực tế là Erlang có lẽ sẽ không bao giờ chạy mô phỏng khoa học khiến bạn sợ; cho nhiều ứng dụng, đó là một ngôn ngữ tuyệt vời.
* HiPE có sẵn thông qua gói erlang-base-hipe trong Debian hoặc ./configure --enable-hipe
từ tarball nguồn.
Nguồn
2012-06-28 19:45:33
Một phần của ngôn ngữ đó là các ngôn ngữ khác * phù hợp hơn; Bộ mạnh của Erlang không phải là thuật toán số. Cho rằng bạn sẽ sử dụng C/Fortran/etc. –
của nó bởi vì cái gì khác là tốt hơn so với Erlang tại tính toán. Erlang vẫn làm tính toán và nếu một vấn đề tính toán có thể được 'parallerised', erlang thậm chí có thể thực hiện tốt hơn. –