2011-07-05 29 views
6

Có thể có ai đó ở đó với các quyền lợi thích hợp sẽ biết cách trả lời câu hỏi này. Về cơ bản câu hỏi là: Sự khác nhau giữa mô-đun multiprocessing bằng Python và chủ nghĩa song song trong Haskell là gì. Ví dụ: các luồng được tạo trong Python được ánh xạ tới các luồng hệ điều hành? Nếu vậy, nếu có nhiều chủ đề hơn lõi? Chúng có được ghép thành các luồng hệ điều hành không? Ai lên lịch cho các chủ đề này? Cảm ơn tất cả thông tin: tài liệu/thông tin chi tiết được đánh giá cao.Haskell so với mô hình luồng Python

+1

Mô hình luồng của GHC Haskell được mô tả trong câu hỏi này: http://stackoverflow.com/questions/5847642/haskell-lightweight-threads-overhead-and-use-on-multicores/5849482#5849482 –

Trả lời

7

Trái ngược với Python (Xem Eli's answer), mô hình luồng của Haskell hoàn toàn khác. Bạn có một sự khác biệt giữa đồng thời (nhiều chủ đề xử lý các khía cạnh khác nhau của chương trình) và song song (nhiều chủ đề chỉ để tăng tốc độ tính toán). Cả hai đều được xử lý bởi các chủ đề nhẹ được quản lý bởi Haskell RTS. Trong trường hợp thứ hai, người ta có thể sử dụng nguyên thủy như pseqpar để gợi ý thời gian chạy để thực hiện phép tính trong một chuỗi khác, nếu điều này mang lại lợi thế. Thời gian chạy tự động quyết định điều này.

6

Mô-đun Python multiprocessing không liên quan gì đến chủ đề. Nó cố gắng cung cấp một API tương tự như threading (trong đó hiện phơi bày chuỗi) với các quy trình bên dưới.

Chủ đề Python được ánh xạ tới chuỗi hệ điều hành và nếu bạn tạo nhiều chủ đề hơn lõi, điều tương tự sẽ xảy ra như khi bạn thực hiện theo chủ đề C (pthreads, chuỗi Win API, v.v.) giữa các lõi.

Có rất nhiều thông tin trực tuyến về các chuỗi Python, chỉ cần Google nó.

+0

Cảm ơn, Eli: " tra Google đi". Tôi đã tự hỏi nếu bạn có thể cụ thể hơn một chút. Có quá nhiều thông tin (và lan rộng) cho tôi để tiêu hóa, do đó câu hỏi. Có lẽ bạn có thể giúp tôi bằng cách chỉ cho tôi tài liệu * tốt nhất *? Ngoài ra, tôi quan tâm đến việc so sánh Python với Haskell, nhiều hơn chỉ là Python. Cảm ơn. –

+0

Cần lưu ý rằng đa luồng trong CPython bị cản trở bởi [GIL] (http://en.wikipedia.org/wiki/Global_Interpreter_Lock). Vì vậy, đa luồng trong Python (chủ đạo) được sử dụng chủ yếu như một phương tiện đắt tiền để đồng thời (và không quá nhiều song song). Ngoài ra còn có một số cơ sở đồng thời của bên thứ ba, chẳng hạn như [greenlets] (http://packages.python.org/greenlet/) giống với một chút microthreads của Haskell trên một lõi đơn. – hvr

+0

@hvr: mô-đun "đa xử lý" cho biết "Khóa phụ có hiệu quả ở bên hông". Chăm sóc để mở rộng về điều này? Xem http://docs.python.org/library/multiprocessing.html –

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