2015-05-05 16 views
8

perldoc threads nói:Các giải pháp thay thế cho chủ đề thông dịch Perl là gì?

Việc sử dụng các chủ đề thông dịch-có trụ sở tại perl chính thức được khuyến khích.

Có bất kỳ chủ đề dựa trên Perl nào khác không? Hay chúng ta không nên sử dụng các chủ đề trong Perl?

+0

Câu trả lời tùy thuộc vào lý do bạn nghĩ bạn cần chuỗi. –

+3

Liên quan: [Trường hợp sử dụng cho ithreads (chủ đề thông dịch viên) trong Perl và lý do để sử dụng hoặc không sử dụng chúng?] (Http://stackoverflow.com/q/9973860/176646) – ThisSuitIsBlackNot

Trả lời

8

Phụ thuộc vào những gì bạn đang cố gắng hoàn thành. Tôi vẫn sử dụng chủ đề rộng rãi, và không có vấn đề gì lớn với họ.

Vấn đề lớn nhất với chúng là chúng không nhẹ, nếu bạn đã tạo luồng bằng các ngôn ngữ khác, bạn có thể mong đợi chúng.

Họ ngược lại - sinh sản một luồng giống như bắt đầu lại mã của bạn, nhưng với một số móc hữu ích cho IPC. Điều đó có nghĩa là bạn thực sự không muốn làm một mô hình nhiệm vụ theo chủ đề của chương trình, giống như bạn có thể nghĩ đến.

Thay vào đó, bạn sẽ được phục vụ tốt hơn theo mô hình kiểu công nhân-chủ đề Thread::Queue. Dưới đây là một ví dụ về điều đó: Perl daemonize with child daemons

Tuy nhiên, bạn có thể muốn xem xét sử dụng fork như một sự thay thế. fork - bởi vì nó được thực hiện trên Unix - là một cuộc gọi hệ thống rất hiệu quả, và có thể khá hiệu quả cho việc sinh sản các quy trình mới. Nhược điểm là - nó không hoàn toàn thân thiện với việc thực hiện IPC.

Parallel::ForkManager là một mô-đun mà tôi muốn thực hiện forking cho đa xử lý.

Nhưng trong cả hai trường hợp bạn nên lưu ý - đa xử lý không phải là một viên đạn ma thuật. Nó cho phép bạn hog nhiều CPU hơn nếu bạn có đúng loại vấn đề cần giải quyết. Nó sẽ không làm cho đĩa của bạn đi nhanh hơn :)

1

Miễn là tôi biết, không có bất kỳ sự thực hiện chủ đề đáng tin cậy nào. Bạn nên tuân theo một số mô-đun dựa trên sự kiện, như Coro, AnyEvent, IO::Async v.v.

+7

Chỉ gây ra các tài liệu không rõ ràng, Coro là một hệ thống đa tác vụ hợp tác. Nếu bạn muốn sử dụng các luồng để tách tải CPU trên các lõi, nó sẽ không giúp ích gì. Không có hệ thống dựa trên sự kiện nào. Chúng hữu ích khi hầu hết các tác vụ được chi tiêu chờ đợi các sự kiện bên ngoài. – ikegami

+6

Chủ đề Perl hoàn toàn đáng tin cậy. Chúng không phải là một chuỗi _light weight_ mà bạn có thể mong đợi nếu bạn đến từ một ngôn ngữ khác. – Sobrique

6

Cảnh báo đó là poppycock. Nó nên được loại bỏ.

Lưu ý rằng việc tạo chuỗi mới có thể tốn kém, vì vậy bạn nên sử dụng mô hình liên quan đến chuỗi công việc có thể tái sử dụng.

+2

Thật vậy. "Lỗ hổng" lớn nhất mà tôi tìm thấy là giả định rằng chúng rất nhẹ, giống như chúng ở một số ngôn ngữ khác. – Sobrique

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