2009-04-30 36 views
24

Sự khác biệt giữa luồng và song song là gì?Threading vs Parallelism, chúng khác nhau như thế nào?

Loại nào có lợi thế hơn loại kia?

+4

Xe ô tô và lái xe khác nhau như thế nào? Luồng là hành vi sử dụng các luồng, song song là khi một cái gì đó chạy song song. Cách phổ biến nhất để làm cho mọi thứ chạy song song là sử dụng các luồng. – jalf

Trả lời

27

Daniel Moth (a former coworker of mine)- Threading/Concurrency vs Parallelism bài viết giải thích tất cả.

Quoted:

Để tận dụng đa lõi từ phần mềm của chúng tôi, cuối cùng đề phải được sử dụng. Bởi vì thực tế này, một số nhà phát triển rơi vào cái bẫy của việc đồng bộ đa luồng đến song song. Đó không phải là chính xác ... Bạn có thể có đa luồng trên một máy lõi đơn, nhưng bạn chỉ có thể có song song trên một máy đa lõi

Kiểm tra nhanh: Nếu trên một máy lõi đơn bạn đang sử dụng chủ đề và nó làm cho cảm giác hoàn hảo cho kịch bản của bạn, sau đó bạn không phải là "làm song song", bạn chỉ làm đa luồng.

+3

Bài viết hay! Có thể có giá trị thêm một bản tóm tắt ngắn hoặc báo giá ở đây, để phòng hộ chống thối liên kết. –

3

Threading là một công nghệ, xử lý song song là một mô hình có thể được thực hiện bằng luồng (nhưng có thể chỉ là một cách dễ dàng được thực hiện bằng chủ đề duy nhất trên nhiều bộ xử lý)

1

Làm thế nào để bạn xác định "song song"? Đa luồng là việc thực hiện cụ thể khái niệm thực thi chương trình song song.

Bài viết RichardOD liên quan đến dường như chủ yếu liên quan đến việc liệu các luồng có thực sự được thực thi song song trên một máy cụ thể hay không.

Tuy nhiên, câu hỏi của bạn dường như thấy đa luồng và song song là đối lập. Bạn có lẽ có nghĩa là các chương trình sử dụng nhiều quy trình thay vì nhiều luồng? Nếu có, sự khác biệt là:

  • Tạo chủ đề rẻ hơn nhiều so với quy trình. Đây là lý do tại sao sử dụng các chủ đề thay vì các quá trình dẫn đến một sự tăng tốc rất lớn trong các ứng dụng web - điều này được gọi là "FastCGI".
  • Nhiều chủ đề trên cùng một máy có quyền truy cập vào bộ nhớ dùng chung. Điều này làm cho giao tiếp giữa các chủ đề dễ dàng hơn nhiều, nhưng cũng rất nguy hiểm (thật dễ dàng để tạo ra các lỗi như điều kiện chủng tộc rất khó chẩn đoán và sửa chữa).
3

Threading thường được gọi là có nhiều quy trình làm việc cùng một lúc trên một CPU (thực ra bạn không nghĩ chúng làm gì nhưng chúng chuyển đổi rất nhanh giữa chúng).

Tính song song đang có nhiều quy trình hoạt động đồng thời trên nhiều CPU.

Cả hai đều có ưu và nhược điểm của chúng tùy thuộc vào bộ lập lịch được hệ điều hành của bạn sử dụng. Thông thường, chi phí tính toán của việc tạo một luồng là thấp hơn nhiều sau đó sinh ra một quá trình trên một CPU khác, tuy nhiên có một CPU 'toàn bộ' cho chính bạn làm tăng tốc độ tổng thể của quá trình đó. Nhưng sau đó một lần nữa nếu quá trình đó cần phải giao tiếp với một quá trình khác trên CPU khác, bạn cần giải quyết vấn đề IPC (giao tiếp liên tục) có thể là một chi phí cao đến mức chỉ cần sử dụng một luồng trên cùng một CPU.

Hầu hết hệ điều hành đều nhận thức được nhiều CPU/lõi và có thể sử dụng chúng, nhưng điều này làm cho trình lên lịch thường khá phức tạp.

Nếu bạn đang lập trình bằng ngôn ngữ sử dụng máy ảo (máy ảo), hãy lưu ý rằng họ cần triển khai trình lập lịch biểu của riêng họ (nếu có). Ví dụ: Ví dụ Python sử dụng GIL, điều này cho thấy mọi thứ chạy trên máy ảo đó vẫn nằm trên cùng một CPU. Mặc dù một số hệ điều hành có khả năng di chuyển một quá trình nặng sang một CPU khác mà không phải là quá bận rộn vào lúc này, mà tất nhiên có nghĩa là toàn bộ quá trình cần phải được tạm dừng trong khi nó đang làm điều đó.

Một số hệ điều hành như DragonFlyBSD có một cách tiếp cận hoàn toàn khác để lên lịch thì tại thời điểm này là cách tiếp cận 'chuẩn'.

Tôi nghĩ câu trả lời này cung cấp cho bạn đủ từ khóa để tìm kiếm thêm thông tin :-)

1

Luồng là sự song song của người nghèo.

CHỈNH SỬA: Để chính xác hơn:

Luồng không liên quan gì đến tính song song và ngược lại. Threading là về làm cho cảm thấy rằng một số quy trình chạy song song. Tuy nhiên, điều này không làm cho quá trình hoàn thành nhanh hơn TẤT CẢ tác vụ của chúng nhanh hơn.

+1

(-1) A. Mỗi công cụ đều có vị trí của nó. B.Bạn có bất cứ điều gì để sao lưu này? – DevinB

+0

Tôi vừa trả lời câu hỏi chủ đề. Câu hỏi gì - đó là câu trả lời. – Thevs

+0

Đối với những người muốn thảo luận mở rộng - hãy bắt đầu với http://www.prodata.lt/EN/Programming/OPU_computing_model.pdf. – Thevs

4

Song song là một kỹ thuật chung của việc sử dụng nhiều luồng hướng dẫn để hoàn thành tính toán. Khía cạnh quan trọng của tất cả các kỹ thuật song song là giao tiếp giữa các luồng để cộng tác với câu trả lời cuối cùng.

Luồng là một triển khai thực hiện song song cụ thể. Mỗi luồng hướng dẫn được cho là ngăn xếp của chính nó để lưu giữ một bản ghi các biến cục bộ và các cuộc gọi hàm, và giao tiếp với các luồng khác ngầm bởi bộ nhớ dùng chung.

Một ví dụ có thể là có một luồng chỉ đơn giản là xếp hàng các yêu cầu đĩa và chuyển nó tới một chuỗi công nhân, song song hiệu quả với đĩa và CPU. Phương pháp ống UNIX truyền thống là để chia chúng thành hai chương trình hoàn chỉnh, nói "mèo" và grep trong lệnh:

cat /var/log/Xorg.0.log | grep "EE" 

Threading conceivably có thể giảm chi phí thông tin liên lạc của sao chép đĩa I/O từ quá trình mèo đến quá trình grep.

1

Đây là câu trả lời hay nhất để xóa bỏ những nghi ngờ của bất kỳ ai liên quan đến tính song song và luồng. [Tôi đọc nó trên quora và tìm thấy hữu ích để chia sẻ với độc giả của SO.]
Chủ đề là một phần mềm xây dựng. Tôi có thể bắt đầu như nhiều pthreads như tôi muốn, ngay cả trên một bộ xử lý lõi đơn cũ. Vì vậy, đa luồng không nhất thiết phải song song: nó chỉ song song nếu phần cứng có thể hỗ trợ nó. Vì vậy, nếu bạn có nhiều lõi và/hoặc siêu phân luồng, đa luồng của bạn trở nên song song. Và những ngày này, thực tế, phần lớn thời gian.

Đồng thời là về các hoạt động không có thứ tự thời gian rõ ràng. Vì vậy, một lần nữa, nếu phần cứng hỗ trợ nó, chúng có thể được thực hiện song song, nếu không, không.

Vì vậy, đa luồng truyền thống gần như đồng nghĩa với đồng thời. Và cả hai chỉ trở nên song song nếu phần cứng hỗ trợ nó. Thậm chí sau đó bạn có thể bắt đầu nhiều chủ đề hơn so với phần cứng hỗ trợ, và bạn còn lại với đồng thời.

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