2009-05-02 67 views
6

Làm thế nào tương tự là tính toán phân tán và luồng? Tôi đã tìm thấy hai giấy tờ đến kết luận khá ngược lại:Máy tính phân tán và chủ đề

"Multi-Threading là dễ dàng hơn Networking Làm thế nào luồng rất dễ dàng và tương tự như mạng mã."

http://software.intel.com/file/14723

(điều này mang lại cho tôi một ấn tượng rằng họ đang giống nhau đến nỗi sau khi đóng gói hai cách tiếp cận này có thể được thực hiện với cùng một mã - nhưng có lẽ tôi sai)

"Lưu ý về tính toán phân tán"

http://research.sun.com/techrep/1994/abstract-29.html

(và điều này đặt sự khác biệt rõ ràng)

Tôi chắc chắn sự thật là ở đâu đó ở giữa. Vàng nghĩa là gì? Có công nghệ nào hợp nhất hai mô hình đó không? Hoặc có những nỗ lực như vậy thất bại vì sự khác biệt cơ bản giữa mạng và đồng thời?

Trả lời

5

Tôi chưa bao giờ thấy chúng rất giống nhau. Hãy để tôi xác định cho mục đích của bài đăng này là một "nút" là một chuỗi phần cứng đang chạy trên một máy. Vì vậy, một máy lõi tứ là bốn nút, như là một cụm bốn hộp xử lý đơn.

Mỗi nút thường sẽ chạy một số quá trình xử lý và sẽ cần có một số loại giao tiếp qua nút. Thông thường, trường hợp đầu tiên của giao tiếp này là nói cho nút phải làm gì. Đối với giao tiếp này, tôi có thể sử dụng bộ nhớ chia sẻ, semaphores, các tệp được chia sẻ, tên đường ống, ổ cắm, các cuộc gọi thủ tục từ xa, được phân phối COM, v.v. Nhưng những cách dễ nhất để sử dụng, bộ nhớ chia sẻ và semaphores, thường không có sẵn trên mạng. Các tệp được chia sẻ có thể có sẵn, nhưng hiệu suất thường kém. Ổ cắm có xu hướng là lựa chọn phổ biến nhất và linh hoạt nhất trên mạng, thay vì các cơ chế phức tạp hơn. Tại thời điểm đó, bạn phải xử lý các chi tiết về kiến ​​trúc mạng, bao gồm độ trễ, băng thông, mất gói, cấu trúc liên kết mạng và hơn thế nữa.

Nếu bạn bắt đầu với hàng đợi công việc, các nút trên cùng một máy có thể sử dụng bộ nhớ dùng chung đơn giản để thực hiện những việc cần làm. Bạn thậm chí có thể viết nó lên không khóa và nó sẽ hoạt động liên tục. Với các nút trên mạng, bạn đặt hàng đợi ở đâu? Nếu bạn tập trung nó, máy đó có thể bị chi phí băng thông rất cao. Cố gắng phân phối nó và mọi thứ trở nên rất phức tạp rất nhanh chóng.

Những gì tôi đã tìm thấy, nói chung, là những người giải quyết loại kiến ​​trúc song song này có xu hướng chọn các vấn đề song song đáng xấu hổ để giải quyết. Raytracing đến với tâm trí. Không cần nhiều giao tiếp qua nút, ngoài việc phân phối công việc. Có rất nhiều vấn đề như thế này, để chắc chắn, nhưng tôi thấy nó có chút bất tiện khi đề xuất rằng tính toán phân tán cơ bản giống như luồng.

Bây giờ nếu bạn định viết luồng hành xử giống hệt với hệ thống phân tán, sử dụng thông điệp thuần tuý và không giả sử bất kỳ chuỗi nào là chủ đề chính và như vậy, thì có, chúng sẽ là rất tương đồng. Nhưng những gì bạn đã làm là giả vờ bạn có một kiến ​​trúc phân tán và thực hiện nó trong các chủ đề. Vấn đề là luồng là một trường hợp song song đơn giản hơn nhiều so với tính toán phân tán thực. Bạn có thể tóm tắt hai thành một vấn đề duy nhất, nhưng bằng cách chọn phiên bản khó hơn và gắn bó chặt chẽ với nó. Và kết quả sẽ không được tốt như họ có thể được khi tất cả các nút là địa phương cho một máy. Bạn không tận dụng lợi thế của trường hợp đặc biệt.

1

Tính toán phân phối được thực hiện trên nhiều máy độc lập khác nhau, thường với đôi khi hệ điều hành chuyên biệt. Nó khó hơn bởi vì sự kết nối của máy thấp hơn nhiều, và do đó các vấn đề đòi hỏi rất nhiều sự truy cập ngẫu nhiên, nhanh chóng đến toàn bộ tập dữ liệu là rất khó giải quyết.

Nói chung, bạn cần thư viện chuyên biệt để thực hiện các vấn đề về tính toán phân tán, tìm hiểu cách gán các nút cho các vấn đề và giỏ hàng xung quanh dữ liệu.

Tôi thực sự tự hỏi liệu họ có đi đến kết luận khác không vì họ đang cố gắng giải quyết các vấn đề sai trên mỗi nền tảng. Một số vấn đề tuân thủ rất độc đáo với các máy có kết nối cao và có thể được hưởng lợi từ các siêu máy tính thực sự. Các vấn đề khác có thể được xử lý trên các mô hình phân tán đơn giản. Nói chung, siêu máy tính có thể giải quyết một loạt các vấn đề khác nhau, nhưng nhiều hơn, chuyên biệt hơn và tốn kém hơn.

1

Sự khác biệt dường như quay lại trạng thái chia sẻ Chủ đề, Xử lý thông báo.

Bạn cần quyết định cách bạn muốn duy trì trạng thái trong ứng dụng của mình trước khi chọn.

Chia sẻ trạng thái dễ dàng để bắt đầu, tất cả dữ liệu và biến chỉ ở đó. Nhưng một khi điều kiện cuộc đua/deadlocks nhập, thật khó để sửa đổi/quy mô.

Thông báo qua (ví dụ Erlang) yêu cầu một cách tiếp cận khác để thiết kế, bạn phải suy nghĩ về cơ hội đồng thời ngay từ đầu, nhưng trạng thái của mỗi quá trình phân tán bị cô lập, làm cho vấn đề khóa/đua dễ dàng hơn.

1

Tôi nghĩ sẽ hữu ích hơn rất nhiều khi so sánh các quy trình với các phương pháp tính toán phân tán hơn là so sánh các luồng với nó. Chủ đề tồn tại bên trong một quá trình duy nhất và chia sẻ cùng một dữ liệu và cùng một bộ nhớ. Điều này là không thể trên một số máy. Mặt khác, các tiến trình có bộ nhớ riêng của chúng, mặc dù trong một số trường hợp, nó có cùng dữ liệu giống với một tiến trình khác (ví dụ sau một ngã ba). Điều này có thể đạt được qua mạng.

Điều gì đó bổ sung thêm trọng lượng cho sự tương tự này là thực tế là nhiều công cụ được sử dụng cho truyền thông liên tiến trình là mạng trong suốt. Một ví dụ tốt sẽ là các ổ cắm unix, sử dụng cùng một giao diện như các ổ cắm mạng (ngoại trừ mã kết nối).

+0

Tính trong suốt của mạng chính xác là cụm từ tôi đang tìm kiếm. "nhiều công cụ được sử dụng cho truyền thông liên tiến trình là mạng trong suốt" - bất kỳ ví dụ cụ thể nào? – sdcvvc

0

Có lúc phát triển phương pháp tiếp cận rất giống nhau nhưng việc sử dụng mỗi cách rất khác nhau. Tôi không hiểu rõ ý kiến ​​của bạn, hãy cho tôi biết nếu tôi sai: Khi nói về tính toán phân tán, chúng tôi giả định nhiều mã máy tính hoặc máy chủ xử lý trong cùng một ứng dụng, nhưng khi chúng tôi nói về Đa luồng, chúng tôi đang nói về xử lý các luồng khác nhau của ứng dụng cùng một lúc trong cùng một máy tính. Bạn có thể nghĩ như một ví dụ về tính toán phân tán, trong một ứng dụng truy cập một dịch vụ web nằm trong Internet. Có hai máy tính khác nhau hoạt động trong cùng một ứng dụng.

Nếu bạn muốn có ví dụ về đa luồng, hãy nghĩ đến ứng dụng đang cố tìm một số nguyên tố lớn. Nếu bạn không sử dụng đa luồng trong nó, bạn sẽ không thể nhìn thấy hoặc làm bất cứ điều gì khác trong ứng dụng tại thời điểm nó tính số nguyên tố tiếp theo (có thể là một thời gian cuộc sống hoặc nhiều hơn) vì ứng dụng không đáp ứng trong khi đang làm việc trong tính toán.

Bạn cũng có thể kết hợp chúng: Như một ví dụ phức tạp hơn, bạn luôn có thể sử dụng đa luồng để truy cập các dịch vụ web khác nhau cùng một lúc bằng cùng một ứng dụng, để làm cho ứng dụng của bạn phản hồi ngay cả khi không kết nối khi một trong các máy chủ.

0

Tôi nghĩ rằng hai tài liệu đó không thể so sánh dễ dàng.Tài liệu của Intel là một loại giới thiệu về luồng, và họ cố gắng giải thích nó bằng cách tìm các phép so sánh với tính toán mạng, điều này hơi lạ và gây hiểu lầm đối với tôi. Tôi không chắc tại sao họ lại chọn cách trình bày luồng như vậy, có lẽ họ nhắm vào những người quen thuộc với mạng, mà có lẽ được biết đến nhiều hơn hoặc ít nhất được công nhận hơn là luồng.

Mặt khác, tài liệu của Sun là một bài viết nghiêm trọng, mô tả tất cả những khó khăn liên quan đến lập trình phân tán. Tất cả những gì tôi có thể làm là chỉ cần xác nhận những gì họ nói trong đó.

Theo ý kiến ​​của tôi, một trừu tượng cố gắng che giấu sự kiện của một đối tượng bị từ xa là có hại vì nó thường dẫn đến hiệu suất rất kém. Các lập trình viên phải nhận thức được sự xa xôi của một đối tượng để có thể gọi nó một cách hiệu quả.

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