2009-07-02 64 views
8

chúng ta có thể sử dụng thay thế lẫn nhau "mã hóa song song" và "Mã hóa đa luồng" trên một CPU không?Mã hóa song song Vs Đa luồng (trên một CPU)

tôi không có nhiều kinh nghiệm ở cả hai, nhưng tôi muốn thay đổi kiểu mã hóa của mình thành bất kỳ kiểu nào ở trên.

Khi tôi tìm thấy bây giờ một ngày nhiều ứng dụng đơn lẻ đã lỗi thời, điều này sẽ tốt hơn cho việc sử dụng phần mềm trong tương lai như một triển vọng nghề nghiệp?

Trả lời

0

Tôi không chắc chắn về những gì bạn nghĩ "mã hóa song song" nhưng mã hóa song song như tôi hiểu nó đề cập đến mã sản xuất được thực hiện song song bởi CPU, và do đó mã đa luồng nằm bên trong mô tả đó.

Bằng cách đó, rõ ràng là bạn có thể sử dụng chúng thay thế cho nhau (khi rơi vào bên kia).

Tuy nhiên, tôi khuyên bạn nên thực hiện từ từ và bắt đầu học từ những điều cơ bản. Hiểu tại sao đa luồng đang trở nên quan trọng, sự khác nhau giữa các quy trình, chủ đề và các sợi là gì, làm thế nào để bạn đồng bộ hóa một trong hai chúng và vân vân.

Hãy nhớ rằng mã hóa song song, như bạn gọi nó, là khá phức tạp, đặc biệt so với mã hóa tuần tự để chuẩn bị. Cũng đừng vội vã vào đó. Chỉ vì bạn sử dụng 3 chủ đề thay vì một chủ đề sẽ không làm cho chương trình của bạn nhanh hơn, nó thậm chí có thể làm cho nó chậm hơn. Bạn cần phải hiểu được các hows và whys. Không phải mọi thứ có thể được thực hiện song song và không phải mọi thứ có thể, nên.

2

Câu hỏi hơi khó hiểu khi bạn có thể thực hiện các thao tác song song trong nhiều luồng, nhưng tất cả các ứng dụng đa luồng không sử dụng tính toán song song. Trong mã song song, bạn thường có nhiều "công nhân" tiêu thụ một tập hợp dữ liệu để trả về kết quả không đồng bộ. Nhưng đa luồng được sử dụng trong phạm vi rộng hơn, như GUI, chặn I/O và kết nối mạng.

Trên một hoặc nhiều CPU không thay đổi nhiều, vì việc quản lý phụ thuộc vào cách hệ điều hành của bạn có thể xử lý các luồng và quy trình.

Đa luồng sẽ hữu ích ở mọi nơi, song song không phải là mô hình tính toán hàng ngày, vì vậy nó có thể là một "thích hợp" trong triển vọng nghề nghiệp.

2

Một số bản demo tôi đã thấy trong .NET 4.0, các thay đổi mã song song có vẻ dễ dàng hơn khi thực hiện chuỗi. Có cú pháp mới cho "For Loops" và những thứ khác để hỗ trợ xử lý song song. Vì vậy, có một sự khác biệt.

Tôi nghĩ rằng trong tương lai bạn sẽ làm cả hai, nhưng tôi nghĩ sự hỗ trợ song song sẽ tốt hơn và dễ dàng hơn. Bạn vẫn cần các chủ đề cho các hoạt động nền và những thứ khác.

+0

http: //channel9.msdn. com/posts/VisualStudio/Sử dụng-the-Song song-Mở rộng-to-the-NET-Framework/ – eschneider

1

Thực tế là bạn không thể đạt được sự song song "thực" trên một CPU đơn lẻ. Có một số thư viện (chẳng hạn như MPI của C) giúp một chút về lĩnh vực này. Nhưng khái niệm về sự không phù hợp không phải là khái niệm về sự tương đồng giữa các nhà phát triển đang làm việc trên các giải pháp phổ biến phổ biến. Đa ngữ phổ biến trong những ngày này nhờ sự ra đời của nhiều lõi trên một CPU đơn, nó dễ dàng và gần như minh bạch để thực hiện trong mọi ngôn ngữ nhờ vào các luồng lib và các kiểu luồng, các phương thức, các lớp và vân vân. Bằng cách này bạn có thể mô phỏng sự tương đương.

Dù sao, nếu bạn bắt đầu với điều này, hãy bắt đầu bằng cách đọc về các chủ đề đồng thời và luồng. Và tất nhiên, chủ đề song song làm việc tốt với nhau.

+0

Đa luồng không phải là dễ dàng trong thực tế bất kỳ ngôn ngữ ngoại trừ có thể trong erlang. –

+0

Tôi đã nghe rất nhiều về erlang và paralellism trên erlang. Đáng tiếc là tôi không biết ngôn ngữ này. Bằng cách đa luồng dễ dàng, tôi muốn tạo nhiều chuỗi và làm cho chúng hoạt động chặt chẽ. Tôi biết nó không phải là tầm thường, nhưng nó không phải là khó để xem xét tìm kiếm một giải pháp cho vấn đề của bạn thay vì luồng. –

+0

@Jorge - Tôi không nghĩ rằng erlang sử dụng các luồng, nhưng các quy trình nhẹ không chia sẻ bộ nhớ – bubaker

12

Chắc chắn có sự chồng chéo giữa đa luồng và mã hóa/tính toán song song, với sự khác biệt chính trong kiến ​​trúc xử lý đích.

Đa luồng đã được sử dụng để khai thác lợi ích của đồng thời trong một quá trình duy nhất trên một CPU có bộ nhớ dùng chung. Việc chạy các chương trình tương tự trên một máy có nhiều CPU có thể dẫn đến tăng tốc đáng kể, nhưng thường là phần thưởng thay vì dự định (cho đến gần đây). Nhiều hệ điều hành có các mô hình luồng (ví dụ: pthreads), được hưởng lợi từ nhưng không yêu cầu nhiều CPU.

Đa là mô hình chuẩn cho song song nhắm mục tiêu lập trình nhiều CPU, từ các máy SMP sớm với nhiều CPU trên một máy lớn, sau đó đến cụm máy tính trên nhiều máy, và bây giờ trở lại với nhiều CPU/lõi trên máy tính đơn. MPI là một tiêu chuẩn có thể hoạt động trên nhiều kiến ​​trúc khác nhau.

Tất nhiên, người ta có thể lập trình thiết kế song song bằng cách sử dụng các chuỗi có khung ngôn ngữ như OpenMP. Tôi đã nghe nói về các ứng dụng/GUI đa thành phần dựa trên việc xử lý riêng biệt mà về mặt lý thuyết có thể chạy ở bất kỳ đâu. Thực tế, có nhiều cái cũ hơn cái sau.

Có lẽ sự khác biệt chính là khi chương trình chạy trên nhiều máy, nơi không thực tế để sử dụng đa luồng và các ứng dụng hiện có dùng chung bộ nhớ sẽ không hoạt động.

0

trong đơn giản Ngôn ngữ đa luồng có sẵn trong CPU của chính nó và lập trình song song là một nhiệm vụ rõ ràng hoặc được thực hiện bởi trình biên dịch hoặc cấu trúc của tôi được viết bởi các lập trình viên "# pragma"

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