Sự khác biệt giữa đồng thời và song song là gì?


1075

Sự khác biệt giữa đồng thời và song song là gì?

Ví dụ được đánh giá cao.


41
Câu trả lời ngắn gọn: Đồng thời là hai dòng khách hàng đặt hàng từ một nhân viên thu ngân (dòng thay phiên nhau đặt hàng); Song song là hai dòng khách hàng đặt hàng từ hai nhân viên thu ngân (mỗi dòng có nhân viên thu ngân riêng).
chharvey

@chharvey: Tôi thực sự nghĩ rằng đây nên là câu trả lời. Ngắn (hai dòng văn bản, nếu bạn bỏ "câu trả lời ngắn"), đến mức, có thể hiểu ngay lập tức. Làm tốt lắm!
Mike Maxwell

Câu trả lời:


1269

Đồng thời là khi hai hoặc nhiều nhiệm vụ có thể bắt đầu, chạy và hoàn thành trong các khoảng thời gian chồng chéo. Điều đó không nhất thiết có nghĩa là cả hai sẽ chạy cùng một lúc. Ví dụ, đa nhiệm trên máy đơn lõi.

Tính song song là khi các tác vụ thực sự chạy cùng một lúc, ví dụ, trên bộ xử lý đa lõi.


Trích dẫn Hướng dẫn lập trình đa luồng của Sun :

  • Đồng thời: Một điều kiện tồn tại khi có ít nhất hai luồng đang tiến triển. Một dạng song song tổng quát hơn có thể bao gồm cắt thời gian như một dạng song song ảo.

  • Tính song song: Một điều kiện phát sinh khi có ít nhất hai luồng đang thực thi đồng thời.


169
Tôi thích câu trả lời này, nhưng có lẽ tôi sẽ đi xa hơn và mô tả đồng thời là một thuộc tính của một chương trình hoặc hệ thống (và song song là hành vi trong thời gian chạy của việc thực thi nhiều tác vụ cùng một lúc).
Adrian Mouat

24
Tôi thích bình luận của Adrian Mouat rất nhiều. Xem thêm lời giải thích tuyệt vời này: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman

9
@Raj: Chính xác, song song (theo nghĩa đa luồng) là không thể với các bộ xử lý lõi đơn.
RichieHulum

5
Nếu tuần tự và song song là cả hai giá trị trong một bảng liệt kê, tên của bảng liệt kê đó sẽ là gì?
chập chững

11
Cuối cùng, trích dẫn của Sun có thể được đặt lại thành: - Đồng thời: Một điều kiện tồn tại khi, trong một khoảng thời gian nhất định , hai luồng đang tiến triển - Song song: Một điều kiện phát sinh khi, đưa ra một thời điểm cụ thể , hai luồng đang thực hiện đồng thời
Phillip

494

Tại sao sự nhầm lẫn tồn tại

Nhầm lẫn tồn tại bởi vì ý nghĩa từ điển của cả hai từ này gần giống nhau:

  • Đồng thời : hiện có, xảy ra hoặc được thực hiện cùng một lúc (dictionary.com)
  • Song song : rất giống nhau và thường xảy ra cùng một lúc (merriam webster).

Tuy nhiên, cách chúng được sử dụng trong khoa học máy tính và lập trình khá khác nhau. Đây là cách giải thích của tôi:

  • Đồng thời : Tính gián đoạn
  • Song song : Độc lập

Vậy ý nghĩa của những định nghĩa trên là gì?

Tôi sẽ làm rõ với một tương tự thế giới thực. Giả sử bạn phải hoàn thành 2 nhiệm vụ rất quan trọng trong một ngày:

  1. Nhận được một hộ chiếu
  2. Nhận bài thuyết trình

Bây giờ, vấn đề là nhiệm vụ-1 yêu cầu bạn phải đến một văn phòng chính phủ cực kỳ quan liêu khiến bạn phải chờ 4 tiếng đồng hồ để lấy hộ chiếu. Trong khi đó, task-2 được yêu cầu bởi văn phòng của bạn và đây là một nhiệm vụ quan trọng. Cả hai phải được hoàn thành vào một ngày cụ thể.

Trường hợp 1: Thi hành tuần tự

Thông thường, bạn sẽ lái xe đến văn phòng hộ chiếu trong 2 giờ, xếp hàng trong 4 giờ, hoàn thành nhiệm vụ, lái xe trở lại hai giờ, về nhà, thức thêm 5 giờ và hoàn thành bài thuyết trình.

Trường hợp 2: Thi hành đồng thời

Nhưng bạn thông minh. Bạn lên kế hoạch trước. Bạn mang theo một chiếc máy tính xách tay và trong khi chờ xếp hàng, bạn bắt đầu làm việc với bài thuyết trình của mình. Bằng cách này, một khi bạn trở về nhà, bạn chỉ cần làm thêm 1 giờ thay vì 5.

Trong trường hợp này, cả hai nhiệm vụ đều do bạn thực hiện, chỉ trong từng mảnh. Bạn đã làm gián đoạn nhiệm vụ hộ chiếu trong khi chờ xếp hàng và làm việc trên trình bày. Khi số của bạn được gọi, bạn bị gián đoạn nhiệm vụ thuyết trình và chuyển sang nhiệm vụ hộ chiếu. Việc tiết kiệm thời gian về cơ bản là có thể do tính gián đoạn của cả hai nhiệm vụ.

Đồng thời, IMO, có thể được hiểu là thuộc tính "cô lập" trong ACID . Hai giao dịch cơ sở dữ liệu được coi là tách biệt nếu các giao dịch phụ có thể được thực hiện theo từng cách và bất kỳ cách xen kẽ nào và kết quả cuối cùng giống như khi hai tác vụ được thực hiện tuần tự. Hãy nhớ rằng, đối với cả hộ chiếu và nhiệm vụ thuyết trình, bạn là người thực thi duy nhất .

Trường hợp 3: Thi hành song song

Bây giờ, vì bạn là một người thông minh như vậy, rõ ràng bạn là một người cao hơn và bạn đã có một trợ lý. Vì vậy, trước khi bạn rời đi để bắt đầu nhiệm vụ hộ chiếu, bạn gọi cho anh ấy và bảo anh ấy chuẩn bị bản thảo đầu tiên của bài thuyết trình. Bạn dành cả ngày và hoàn thành nhiệm vụ hộ chiếu, quay lại và xem thư của bạn, và bạn tìm thấy bản thảo trình bày. Anh ấy đã thực hiện một công việc khá vững chắc và với một số chỉnh sửa trong 2 giờ nữa, bạn hoàn thành nó.

Bây giờ, trợ lý của bạn cũng thông minh như bạn, anh ta có thể làm việc một cách độc lập mà không cần phải liên tục yêu cầu bạn làm rõ. Do đó, do tính độc lập của các tác vụ, chúng được thực hiện cùng lúc bởi hai người thực thi khác nhau .

Vẫn còn với tôi? Ổn thỏa...

Trường hợp 4: Đồng thời nhưng không song song

Ghi nhớ nhiệm vụ hộ chiếu của bạn, nơi bạn phải chờ trong dòng? Vì đó là hộ chiếu của bạn , trợ lý của bạn không thể xếp hàng chờ bạn. Do đó, nhiệm vụ hộ chiếu có tính gián đoạn (bạn có thể dừng nó trong khi chờ xếp hàng và tiếp tục lại sau khi số của bạn được gọi), nhưng không có tính độc lập (trợ lý của bạn không thể chờ đợi thay bạn).

Trường hợp 5: Song song nhưng không đồng thời

Giả sử văn phòng chính phủ có kiểm tra an ninh để vào cơ sở. Tại đây, bạn phải xóa tất cả các thiết bị điện tử và gửi chúng cho cảnh sát viên và họ chỉ trả lại thiết bị của bạn sau khi bạn hoàn thành nhiệm vụ.

Trong trường hợp này, nhiệm vụ hộ chiếu không độc lập cũng không bị gián đoạn . Ngay cả khi bạn đang chờ xếp hàng, bạn không thể làm việc trên một thứ khác vì bạn không có thiết bị cần thiết.

Tương tự, giả sử bài thuyết trình có tính toán học cao đến mức bạn yêu cầu sự tập trung 100% trong ít nhất 5 giờ. Bạn không thể làm điều đó trong khi chờ xếp hàng cho nhiệm vụ hộ chiếu, ngay cả khi bạn có máy tính xách tay bên mình.

Trong trường hợp này, tác vụ thuyết trình là độc lập (bạn hoặc trợ lý của bạn có thể bỏ ra 5 giờ nỗ lực tập trung), nhưng không bị gián đoạn .

Trường hợp 6: Thi hành đồng thời và song song

Bây giờ, giả sử rằng ngoài việc chỉ định trợ lý của bạn cho bài thuyết trình, bạn còn mang theo máy tính xách tay để làm nhiệm vụ hộ chiếu. Trong khi chờ xếp hàng, bạn thấy rằng trợ lý của bạn đã tạo ra 10 slide đầu tiên trong một sàn chung. Bạn gửi ý kiến ​​về công việc của mình với một số sửa chữa. Sau này, khi bạn trở về nhà, thay vì 2 giờ để hoàn thành bản nháp, bạn chỉ cần 15 phút.

Điều này là có thể bởi vì nhiệm vụ thuyết trình có tính độc lập (một trong hai bạn có thể làm được) và khả năng ngắt (bạn có thể dừng nó và tiếp tục lại sau). Vì vậy, bạn đồng thời thực hiện cả hai nhiệm vụ và thực hiện song song nhiệm vụ trình bày.

Hãy nói rằng, ngoài việc quá quan liêu, văn phòng chính phủ là tham nhũng. Do đó, bạn có thể hiển thị nhận dạng của mình, nhập số đó, bắt đầu xếp hàng chờ số của bạn được gọi, mua chuộc một người bảo vệ và người khác giữ vị trí của bạn trong hàng, lẻn ra ngoài, quay lại trước khi số của bạn được gọi và tiếp tục chờ bản thân bạn.

Trong trường hợp này, bạn có thể thực hiện đồng thời cả nhiệm vụ hộ chiếu và trình bày và song song. Bạn có thể lẻn ra ngoài, và vị trí của bạn được giữ bởi trợ lý của bạn. Cả hai bạn sau đó có thể làm việc trên bài thuyết trình, vv


Quay lại khoa học máy tính

Trong thế giới điện toán, đây là các kịch bản ví dụ điển hình cho từng trường hợp sau:

  • Trường hợp 1: Xử lý ngắt.
  • Trường hợp 2: Khi chỉ có một bộ xử lý, nhưng tất cả các tác vụ thực thi đều có thời gian chờ do I / O.
  • Trường hợp 3: Thường thấy khi chúng ta đang nói về các cụm giảm bản đồ hoặc hadoop.
  • Trường hợp 4: Tôi nghĩ Trường hợp 4 là hiếm. Nó không phổ biến cho một nhiệm vụ đồng thời nhưng không song song. Nhưng nó có thể xảy ra. Ví dụ: giả sử tác vụ của bạn yêu cầu quyền truy cập vào một con chip tính toán đặc biệt chỉ có thể được truy cập thông qua bộ xử lý-1. Do đó, ngay cả khi bộ xử lý-2 miễn phí và bộ xử lý-1 đang thực hiện một số tác vụ khác, tác vụ tính toán đặc biệt không thể tiến hành trên bộ xử lý-2.
  • Trường hợp 5: cũng hiếm, nhưng không hoàn toàn hiếm như Trường hợp 4. Mã không đồng thời có thể là một khu vực quan trọng được bảo vệ bởi các trường hợp đột biến. Một khi nó được bắt đầu, nó phải thực hiện để hoàn thành. Tuy nhiên, hai khu vực quan trọng khác nhau có thể tiến triển đồng thời trên hai bộ xử lý khác nhau.
  • Trường hợp 6: IMO, hầu hết các cuộc thảo luận về lập trình song song hoặc đồng thời về cơ bản đều nói về Trường hợp 6. Đây là sự pha trộn và kết hợp của cả hai thực thi song song và đồng thời.

Đồng thời và đi

Nếu bạn thấy lý do tại sao Rob Pike nói đồng thời là tốt hơn, bạn phải hiểu rằng lý do là. Bạn có một nhiệm vụ thực sự dài trong đó có nhiều khoảng thời gian chờ trong đó bạn chờ một số thao tác bên ngoài như đọc tệp, tải xuống mạng. Trong bài giảng của mình, tất cả những gì anh ta nói là, chỉ cần chia tay nhiệm vụ tuần tự dài này để bạn có thể làm điều gì đó hữu ích trong khi chờ đợi. Đó là lý do tại sao anh ấy nói về các tổ chức khác nhau với các gophers khác nhau.

Bây giờ sức mạnh của Go đến từ việc làm cho việc phá vỡ này thực sự dễ dàng với gotừ khóa và các kênh. Ngoài ra, có sự hỗ trợ cơ bản tuyệt vời trong thời gian chạy để lên lịch cho những con khỉ đột này.

Nhưng về cơ bản, là đồng thời tốt hơn mà song song?

Có phải táo tốt hơn cam?


Cảm ơn cho trường hợp 5. Tôi thường nghĩ rằng ẩn song song có nghĩa là đồng thời.
hqt 28/07/19

2
Vòng lặp sự kiện Node.js là một ví dụ điển hình cho trường hợp 4. Mặc dù bộ xử lý B có tài nguyên miễn phí, yêu cầu X phải được xử lý bởi bộ xử lý A đang xử lý bận Y. Nếu setTimeout được gọi cho Y, thì X có thể được xử lý, sau đó, sau khi hết thời gian Y cũng sẽ được xử lý.
Lucas Janon

Cần lưu ý hai định nghĩa của một từ "đồng thời" được đưa vào câu trả lời được chấp nhận và từ này khá khác biệt . Đầu tiên đề cập đến khái niệm để chạy một số nhiệm vụ trong các khoảng thời gian chồng chéo (nghĩa là song song có nghĩa là đồng thời bởi def), thứ hai đề cập đến khái niệm để làm gián đoạn một nhiệm vụ để chạy một nhiệm vụ khác.
Mergasov

Tương tự như nhận xét ở trên - trăn đa luồng là một ví dụ về trường hợp 4. Tôi không nghĩ trường hợp này là không phổ biến. Bất kỳ khóa thông dịch toàn cầu nào cũng sẽ dẫn đến trường hợp 4 (nếu nó cho phép đồng thời).
chub500

245

Tôi thích bài nói chuyện của Rob Pike: Đồng thời không phải là Song song (tốt hơn!) (Slide) (thảo luận)

Rob thường nói về Go và thường giải quyết câu hỏi về Tương tranh và Song song trong một lời giải thích trực quan và trực quan! Đây là một bản tóm tắt ngắn:

Nhiệm vụ: Hãy đốt một đống sách hướng dẫn ngôn ngữ lỗi thời! Cùng một lúc!

Bài tập

Đồng thời: Có nhiều phân tách đồng thời của nhiệm vụ! Một ví dụ:

Gophers

Tính song song: Cấu hình trước xảy ra song song nếu có ít nhất 2 gophers hoạt động cùng lúc hay không.


9
Để xem video, hãy xem blog.heroku.com/archives/2013/2/24/ Cách
Pramod

15
Xin lỗi, đã phải tải xuống cho bit "tốt hơn". Câu trả lời đúng là nó khác nhau. Đồng thời là một phần của vấn đề. Song song là một phần của giải pháp.
pyon

@ EduardoLeón Bạn rõ ràng không kiểm tra tên của cuộc nói chuyện. Đồng thời không phải là một vấn đề, nó chỉ là một cách để suy nghĩ về một vấn đề / nhiệm vụ.
vào

5
@asfer Đồng thời là một phần của cấu trúc của vấn đề. Nhân tiện, đừng kết hợp "đồng thời" (vấn đề) với "kiểm soát tương tranh" (một giải pháp, thường được sử dụng cùng với song song).
pyon

1
Tôi đã xem nó và thực sự tôi không thích nó. Nó thêm các biến chứng không cần thiết và mọt sách vào một cái gì đó nên được giải thích theo cách đơn giản hơn nhiều (kiểm tra câu trả lời của người tung hứng ở đây).
jj_

146

Để thêm vào những gì người khác đã nói:

Đồng thời giống như có một người tung hứng tung hứng nhiều quả bóng. Bất kể nó có vẻ như thế nào, người tung hứng chỉ bắt / ném một quả bóng mỗi tay một lần. Song song là có nhiều kẻ tung hứng tung hứng bóng cùng một lúc.


2
Tôi sẽ rất kén chọn, nhưng nếu bạn đang tung hứng với một số lượng bóng, bạn có thể có hai quả bóng cùng một lúc (tùy thuộc vào cách bạn tung hứng).
bọ rùa

52
@thebugfinder, Để đảm bảo không còn chỗ cho lỗi trong ví dụ của Thomas. Đồng thời giống như một người tung hứng chỉ với 1 tay. Bất kể làm thế nào có vẻ như người đó chỉ giữ nhiều nhất một quả bóng tại một thời điểm. Song song là khi người tung hứng sử dụng cả hai tay.
bigtunacan

những gì tôi thực sự muốn nói với "cặp số bóng" là "số lượng bóng
chẵn

1
Câu trả lời rất thông minh. Tôi chắc chắn có thể thấy quan điểm của bọ rùa, nhưng tôi thích câu trả lời này rất nhiều nếu một hành động tại một thời điểm được tính đến và đồng ý.
BK

2
Tôi nghĩ sẽ tốt hơn với "Song song là có một người cho mỗi quả bóng". Nếu số lượng bóng tăng (tưởng tượng các yêu cầu web), những người đó có thể bắt đầu tung hứng, làm cho việc thực hiện đồng thời và song song. Ngoài ra tôi rất thích là ai đó có thể giải thích mô hình lò phản ứng với ví dụ về người tung hứng ..
jj_

120

Nói rằng bạn có một chương trình có hai chủ đề. Chương trình có thể chạy theo hai cách:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

Trong cả hai trường hợp, chúng tôi có sự tương tranh từ thực tế là chúng tôi có nhiều hơn một luồng đang chạy.

Nếu chúng tôi chạy chương trình này trên một máy tính có lõi CPU, hệ điều hành sẽ chuyển đổi giữa hai luồng, cho phép một luồng chạy cùng một lúc.

Nếu chúng tôi chạy chương trình này trên máy tính có CPU đa lõi thì chúng tôi có thể chạy song song hai luồng - song song cùng một lúc.


4
Tôi thích các khối chủ đề. Đơn giản, nhưng hoàn hảo! Cảm ơn bạn cho một câu trả lời tuyệt vời như vậy.
bozzmob

53

Đồng thời: Nếu hai hoặc nhiều vấn đề được giải quyết bằng một bộ xử lý. văn bản thay thế

Tính song song: Nếu một vấn đề được giải quyết bằng nhiều bộ xử lý.

văn bản thay thế


55
Tôi không đồng ý với điều này - một chương trình được thiết kế đồng thời có thể hoặc không thể chạy song song; đồng thời là một thuộc tính của một chương trình, sự song song có thể xảy ra khi nó thực thi.
Adrian Mouat

36

Tôi sẽ cố gắng giải thích với một ví dụ thú vị và dễ hiểu. :)

Giả sử rằng một tổ chức tổ chức một giải đấu cờ vua trong đó 10 người chơi ( có kỹ năng chơi cờ bằng nhau ) sẽ thách đấu một nhà vô địch chuyên nghiệp người chơi cờ . Và vì cờ vua là trò chơi 1: 1 nên các nhà tổ chức phải tiến hành 10 trò chơi theo cách hiệu quả về thời gian để họ có thể hoàn thành toàn bộ sự kiện nhanh nhất có thể.

Hy vọng các kịch bản sau đây sẽ dễ dàng mô tả nhiều cách tiến hành 10 trò chơi này:

1) SERIAL - giả sử rằng người chơi chuyên nghiệp chơi từng người một, tức là bắt đầu và kết thúc trò chơi với một người và sau đó bắt đầu trò chơi tiếp theo với người tiếp theo, v.v. Nói cách khác, họ quyết định tiến hành các trò chơi tuần tự. Vì vậy, nếu một trò chơi mất 10 phút để hoàn thành thì 10 trò chơi sẽ mất 100 phút, cũng giả sử rằng quá trình chuyển đổi từ trò chơi này sang trò chơi khác mất 6 giây thì trong 10 trò chơi sẽ là 54 giây (khoảng 1 phút).

vì vậy toàn bộ sự kiện sẽ hoàn thành trong khoảng 101 phút ( TIẾP CẬN HOẠT ĐỘNG )

2) Ý TƯỞNG - giả sử rằng chuyên gia chơi lượt của mình và chuyển sang người chơi tiếp theo để cả 10 người chơi cùng chơi nhưng người chơi chuyên nghiệp không ở cùng lúc với hai người, anh ta chơi lượt của mình và chuyển sang người tiếp theo. Bây giờ giả sử người chơi chuyên nghiệp mất 6 giây để chơi lượt của mình và thời gian chuyển tiếp của người chơi chuyên nghiệp b / w hai người chơi là 6 giây nên tổng thời gian chuyển tiếp để quay lại người chơi đầu tiên sẽ là 1 phút (10 x 6 giây). Do đó, vào thời điểm anh ấy trở lại với người đầu tiên, người đã bắt đầu sự kiện, 2 phút đã trôi qua (10htime_per_turn_by_champion + 10xtransition_time = 2 phút)

Giả sử rằng tất cả người chơi mất 45 giây để hoàn thành lượt của mình, dựa trên 10 phút cho mỗi trò chơi từ sự kiện SERIAL thì không. số vòng trước khi trò chơi kết thúc phải là 600 / (45 + 6) = 11 vòng (xấp xỉ)

Vì vậy, toàn bộ sự kiện sẽ hoàn thành khoảng 11xtime_per_turn_by_player _ & _ champ + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221 giây = 20,35 phút (khoảng)

XEM CẢI TIẾN từ 101 phút đến 20,35 phút ( TIẾP CẬN TỐT HƠN )

3) PARALLEL - giả sử ban tổ chức nhận thêm một số tiền và do đó quyết định mời hai người chơi vô địch chuyên nghiệp (cả hai đều có khả năng như nhau) và chia tập hợp 10 người chơi (những người thách đấu) thành hai nhóm 5 người và chỉ định họ cho hai nhà vô địch, tức là một mỗi nhóm Bây giờ sự kiện đang diễn ra song song trong hai bộ này, tức là ít nhất hai người chơi (một trong mỗi nhóm) đang thi đấu với hai người chơi chuyên nghiệp trong nhóm tương ứng của họ.

Tuy nhiên, trong nhóm, người chơi chuyên nghiệp có một người chơi cùng một lúc (nghĩa là tuần tự), do đó, không cần tính toán, bạn có thể dễ dàng suy ra rằng toàn bộ sự kiện sẽ hoàn thành trong 101/2 = 50,5 phút để hoàn thành

XEM CẢI TIẾN từ 101 phút đến 50,5 phút ( TIẾP CẬN TỐT )

4) CONCURRENT + PARALLEL - Trong trường hợp trên, giả sử rằng hai người chơi vô địch sẽ chơi đồng thời (đọc điểm 2) với 5 người chơi trong các nhóm tương ứng của họ để bây giờ các trò chơi giữa các nhóm đang chạy song song nhưng trong nhóm họ đang chạy đồng thời.

Vì vậy, các trò chơi trong một nhóm sẽ hoàn thành xấp xỉ trong 11xtime_per_turn_by_player _ & _ champ + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15,5 phút (khoảng)

Vì vậy, toàn bộ sự kiện (liên quan đến hai nhóm chạy song song như vậy) sẽ hoàn thành khoảng 15,5 phút

XEM CẢI TIẾN từ 101 phút đến 15,5 phút ( TIẾP CẬN TỐT NHẤT )

LƯU Ý: trong trường hợp trên nếu bạn thay thế 10 người chơi bằng 10 công việc tương tự và hai người chơi chuyên nghiệp bằng hai lõi CPU thì một lần nữa thứ tự sau sẽ vẫn đúng:

SERIAL> PARALLEL> CONCURRENT> CONCURRENT + PARALLEL

(LƯU Ý: thứ tự này có thể thay đổi cho các kịch bản khác vì thứ tự này phụ thuộc nhiều vào sự phụ thuộc lẫn nhau của công việc, nhu cầu giao tiếp b / w công việc và công việc b / w chuyển tiếp)


2
Giải thích tuyệt vời. Có một bổ sung. Mô hình đồng thời cho trường hợp thứ 2 (khi một người chơi chuyên nghiệp di chuyển người chơi b / w) sẽ chỉ được cải thiện nếu người chơi thực hiện lần lượt trong 45 giây. Nói cách khác, chúng ta nên có I / O chờ trong toàn bộ quá trình. Nếu một người chơi thông thường có thể quay trong ít hơn 45 giây (5 hoặc có thể là 10 giây) thì sự cải thiện sẽ ít hơn. Do đó, nếu chúng ta không có thời gian chờ đợi I / O trong công việc, đồng thời sẽ gần giống như thực hiện nối tiếp.
Psylone

33

Ví dụ đơn giản:

Đồng thời là: "Hai hàng đợi truy cập vào một máy ATM"

Song song là: "Hai hàng đợi và hai máy ATM"


Và đa luồng? Chỉ cần suy nghĩ làm thế nào thuật ngữ đa luồng phù hợp trong kịch bản trên. Trong trường hợp này, là Đồng thời == Đa luồng, như trong một từ mỗi hàng đợi đi ATM mỗi giây?
KhoPhi

31

Hãy tưởng tượng học một ngôn ngữ lập trình mới bằng cách xem một video hướng dẫn. Bạn cần tạm dừng video, áp dụng những gì đã nói trong mã sau đó tiếp tục xem. Đó là sự đồng thời.

Bây giờ bạn là một lập trình viên chuyên nghiệp. Và bạn thích nghe nhạc bình tĩnh trong khi viết mã. Đó là sự song song.

Như Andrew Gerrand đã nói trong Blog GoLang

Đồng thời là về việc giải quyết nhiều thứ cùng một lúc. Song song là làm nhiều việc cùng một lúc.

Thưởng thức.


29

Họ giải quyết các vấn đề khác nhau. Đồng thời giải quyết vấn đề có nguồn tài nguyên CPU khan hiếm và nhiều tác vụ. Vì vậy, bạn tạo các luồng hoặc các đường dẫn thực thi độc lập thông qua mã để chia sẻ thời gian trên tài nguyên khan hiếm. Cho đến gần đây, sự tương tranh đã chiếm ưu thế trong cuộc thảo luận vì tính khả dụng của CPU.

Parallelism giải quyết vấn đề tìm đủ nhiệm vụ và nhiệm vụ phù hợp (những nhiệm vụ có thể được phân tách chính xác) và phân phối chúng trên các tài nguyên CPU dồi dào. Song song luôn luôn có mặt, nhưng nó đang đi đầu vì bộ xử lý đa lõi rất rẻ.


28

đồng thời: nhiều luồng thực thi với tiềm năng chia sẻ tài nguyên

Ví dụ: hai luồng cạnh tranh cho một cổng I / O.

paralelism: chia một vấn đề trong nhiều khối tương tự.

Ví dụ: phân tích một tệp lớn bằng cách chạy hai quy trình trên mỗi nửa tệp.


21

Thực hiện lập trình đồng thời có 2 loại: lập trình đồng thời không song song và lập trình đồng thời song song (còn được gọi là song song).

Sự khác biệt chính là ở mắt người, các luồng trong đồng thời không song song dường như chạy cùng một lúc nhưng thực tế chúng không như vậy. Trong các luồng đồng thời không song song nhanh chóng chuyển đổi và lần lượt sử dụng bộ xử lý thông qua việc cắt thời gian. Trong khi song song có nhiều bộ xử lý có sẵn như vậy, nhiều luồng có thể chạy trên các bộ xử lý khác nhau cùng một lúc. nhập mô tả hình ảnh ở đây

Tham khảo: Giới thiệu về đồng thời trong ngôn ngữ lập trình


8
một bức tranh đáng giá ngàn lời nói
giác quan

21

Song song là thực thi đồng thời các quá trình trên một multiple cores per CPUhoặc multiple CPUs (on a single motherboard).

Đồng thời là khi đạt được tính song songsingle core/CPU bằng cách sử dụng các thuật toán lập lịch phân chia thời gian của CPU (lát cắt thời gian). Các quy trình được xen kẽ .

Các đơn vị:

  • 1 hoặc nhiều lõi trong một CPU (khá nhiều bộ xử lý hiện đại)
  • 1 hoặc nhiều CPU trên bo mạch chủ (nghĩ rằng các máy chủ trường học cũ)
  • 1 ứng dụng là 1 chương trình (nghĩ trình duyệt Chrome)
  • 1 chương trình có thể có 1 hoặc nhiều quy trình (nghĩ rằng mỗi tab trình duyệt Chrome là một quy trình)
  • 1 quá trình có thể có 1 hoặc nhiều luồng từ 1 chương trình (tab Chrome phát video Youtube trong 1 luồng, một luồng khác xuất hiện cho phần nhận xét, một luồng khác cho thông tin đăng nhập của người dùng)
  • Do đó, 1 chương trình có thể có 1 hoặc nhiều luồng thực thi
  • 1 quá trình là thread(s)+allocated memory resources by OS (heap, thanh ghi, ngăn xếp, bộ nhớ lớp)

2
Tôi nghĩ rằng đây là câu trả lời hoàn hảo trong thế giới Khoa học Máy tính.
sofs1

1
Câu trả lời này phải là câu trả lời được chấp nhận, không phải là triết lý trên và dưới
Eugen Sunic

10

Đồng thời => Khi nhiều tác vụ được thực hiện trong các khoảng thời gian chồng chéo với các tài nguyên được chia sẻ (có khả năng tối đa hóa việc sử dụng tài nguyên).

Song song => khi một tác vụ đơn được chia thành nhiều tác vụ phụ độc lập đơn giản có thể được thực hiện đồng thời.


Làm thế nào bạn sẽ mô tả một hệ thống bộ xử lý lõi đơn có nhiều tác vụ (lát thời gian) để xuất hiện xử lý chồng chéo? Khi đồng thời được định nghĩa là thực thi trong các khoảng thời gian chồng lấp, nó bao gồm quá trình xử lý này. Bạn đã mô tả thực thi đồng thời loại trừ nó theo định nghĩa đồng thời của bạn.
acarlon

9

Hãy nghĩ về nó như là phục vụ hàng đợi trong đó máy chủ chỉ có thể phục vụ công việc đầu tiên trong hàng đợi.

1 máy chủ, 1 hàng đợi công việc (có 5 công việc) -> không đồng thời, không song song (Chỉ có một công việc đang được phục vụ để hoàn thành, công việc tiếp theo trong hàng đợi phải đợi cho đến khi công việc được phục vụ hoàn thành và không có máy chủ nào khác phục vụ nó)

1 máy chủ, 2 hoặc nhiều hàng đợi khác nhau (với 5 công việc trên mỗi hàng đợi) -> đồng thời (vì máy chủ đang chia sẻ thời gian với tất cả các công việc đầu tiên trong hàng đợi, bằng hoặc có trọng số), vẫn không có sự song song vì ngay lập tức, có một và chỉ công việc đang được phục vụ

2 máy chủ trở lên, một Hàng đợi -> song song (2 công việc được thực hiện cùng một lúc) nhưng không có sự tương tranh (máy chủ không chia sẻ thời gian, công việc thứ 3 phải đợi cho đến khi một trong các máy chủ hoàn thành.)

2 hoặc nhiều máy chủ, 2 hoặc nhiều hàng đợi khác nhau -> đồng thời và song song

Nói cách khác, đồng thời là chia sẻ thời gian để hoàn thành một công việc, nó có thể mất cùng thời gian để hoàn thành công việc của mình nhưng ít nhất nó được bắt đầu sớm. Điều quan trọng là, các công việc có thể được cắt thành các công việc nhỏ hơn, cho phép xen kẽ.

Tính song song đạt được chỉ với nhiều CPU, máy chủ, con người, vv chạy song song.

Hãy ghi nhớ, nếu các tài nguyên được chia sẻ, có thể đạt được sự song song thuần túy, nhưng đây là lúc đồng thời sẽ sử dụng nó thực tế tốt nhất, đảm nhận một công việc khác không cần tài nguyên đó.


7

Tôi sẽ đưa ra một câu trả lời mâu thuẫn một chút với một số câu trả lời phổ biến ở đây. Theo tôi, đồng thời là một thuật ngữ chung bao gồm song song. Đồng thời áp dụng cho mọi tình huống trong đó các nhiệm vụ hoặc đơn vị công việc khác nhau trùng lặp về thời gian. Tính song song áp dụng cụ thể hơn cho các tình huống trong đó các đơn vị công việc riêng biệt được đánh giá / thực hiện tại cùng một thời điểm vật lý. Cơ chế song song đang tăng tốc phần mềm có thể hưởng lợi từ nhiều tài nguyên tính toán vật lý. Khái niệm chính khác phù hợp với đồng thời là tính tương tác. Tương tácáp dụng khi sự chồng chéo của các nhiệm vụ có thể quan sát được từ thế giới bên ngoài. Cơ chế tương tác đang tạo ra phần mềm đáp ứng các thực thể trong thế giới thực như người dùng, mạng ngang hàng, thiết bị ngoại vi phần cứng, v.v.

Tính song song và tính tương tác là chiều kích gần như hoàn toàn độc lập. Đối với một dự án cụ thể, các nhà phát triển có thể quan tâm đến một trong hai hoặc cả hai. Họ có xu hướng bị xáo trộn, nhất là bởi vì sự ghê tởm đó là các chủ đề mang lại một nguyên thủy thuận tiện hợp lý để làm cả hai.

Một chi tiết nhỏ hơn về song song :

Song song tồn tại ở quy mô rất nhỏ (ví dụ: song song mức hướng dẫn trong bộ xử lý), quy mô trung bình (ví dụ bộ xử lý đa lõi) và quy mô lớn (ví dụ: cụm tính toán hiệu năng cao). Áp lực đối với các nhà phát triển phần mềm để phơi bày nhiều hơn song song mức luồng đã tăng lên trong những năm gần đây, vì sự phát triển của bộ xử lý đa lõi. Song song có mối liên hệ mật thiết với khái niệm phụ thuộc . Sự phụ thuộc giới hạn mức độ song song có thể đạt được; hai nhiệm vụ không thể được thực thi song song nếu một nhiệm vụ phụ thuộc vào nhau (Bỏ qua suy đoán).

Có rất nhiều mẫu và khung mà các lập trình viên sử dụng để thể hiện tính song song: đường ống, nhóm tác vụ, hoạt động tổng hợp trên các cấu trúc dữ liệu ("mảng song song").

Chi tiết hơn một chút về tính tương tác :

Cách cơ bản và phổ biến nhất để thực hiện tương tác là với các sự kiện (tức là vòng lặp sự kiện và trình xử lý / gọi lại). Đối với các nhiệm vụ đơn giản sự kiện là tuyệt vời. Cố gắng thực hiện các nhiệm vụ phức tạp hơn với các sự kiện bị xé toạc ngăn xếp (hay còn gọi là địa ngục gọi lại; hay điều khiển đảo ngược). Khi bạn chán ngấy với các sự kiện, bạn có thể thử nhiều thứ kỳ lạ hơn như máy phát điện, coroutines (còn gọi là Async / Await) hoặc các chủ đề hợp tác.

Vì yêu thích phần mềm đáng tin cậy, vui lòng không sử dụng các chủ đề nếu những gì bạn đang làm là tương tác.

Curmudgeonness

Tôi không thích khẩu hiệu "đồng thời không phải là song song; tốt hơn" của Rob Pike. Đồng thời không tốt hơn cũng không tệ hơn song song. Đồng thời bao gồm tính tương tác không thể so sánh theo cách tốt hơn / xấu hơn với tính song song. Nó giống như nói "điều khiển luồng tốt hơn dữ liệu".


6

Trong điện tử nối tiếpsong song đại diện cho một loại cấu trúc liên kết tĩnh, xác định hành vi thực tế của mạch. Khi không có sự tương tranh, sự song song mang tính quyết định .

Để mô tả các hiện tượng động, liên quan đến thời gian , chúng tôi sử dụng các thuật ngữ tuần tựđồng thời . Ví dụ, một kết quả nhất định có thể thu được thông qua một chuỗi các nhiệm vụ nhất định (ví dụ: một công thức). Khi chúng ta đang nói chuyện với ai đó, chúng ta đang tạo ra một chuỗi các từ. Tuy nhiên, trong thực tế, nhiều quá trình khác xảy ra trong cùng một thời điểm, và do đó, đồng tình với kết quả thực tế của một hành động nhất định. Nếu nhiều người đang nói cùng một lúc, các cuộc đàm phán đồng thời có thể can thiệp vào trình tự của chúng tôi, nhưng kết quả của sự can thiệp này không được biết trước. Đồng thời giới thiệu không xác định .

Các đặc tính nối tiếp / song song và tuần tự / đồng thời là trực giao. Một ví dụ về điều này là trong giao tiếp kỹ thuật số. Trong một bộ chuyển đổi nối tiếp , một thông điệp kỹ thuật số được tạm thời (tức là tuần tự ) được phân phối dọc theo cùng một đường truyền (ví dụ: một dây). Trong một bộ chuyển đổi song song , điều này cũng được chia trên các đường truyền song song (ví dụ: nhiều dây), sau đó được xây dựng lại ở đầu nhận.

Hãy để chúng tôi hình ảnh một trò chơi, với 9 trẻ em. Nếu chúng ta loại bỏ chúng như một chuỗi, đưa ra một thông điệp ở đầu tiên và nhận được nó ở cuối, chúng ta sẽ có một giao tiếp nối tiếp. Nhiều từ hơn soạn tin nhắn, bao gồm một chuỗi các đoàn kết giao tiếp.

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

Đây là một quá trình tuần tự được sao chép trên cơ sở hạ tầng nối tiếp .

Bây giờ, hãy để chúng tôi hình ảnh để chia trẻ em thành các nhóm 3. Chúng tôi chia cụm từ thành ba phần, đưa phần đầu tiên cho đứa trẻ của dòng bên trái của chúng tôi, phần thứ hai cho con của dòng trung tâm, v.v.

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

Đây là một quá trình tuần tự được sao chép trên một cơ sở hạ tầng song song (mặc dù vẫn được tuần tự hóa một phần).

Trong cả hai trường hợp, giả sử có một sự giao tiếp hoàn hảo giữa những đứa trẻ, kết quả được xác định trước.

Nếu có những người khác nói chuyện với đứa trẻ đầu tiên cùng lúc với bạn, thì chúng tôi sẽ có các quy trình đồng thời . Chúng tôi không biết quy trình nào sẽ được xem xét bởi cơ sở hạ tầng, vì vậy kết quả cuối cùng là không được xác định trước.


+1 Thú vị. Trong tính toán một định nghĩa, theo câu trả lời hiện được chấp nhận đồng thời có nghĩa là thực thi trong các khoảng thời gian chồng chéo, không nhất thiết phải đồng thời (sẽ song song). Trong điện tử, làm thế nào để bạn mô tả các mạch được thiết kế để mang lại sự xuất hiện của những thứ xảy ra cùng một lúc, nhưng chỉ chuyển đổi rất nhanh. Để tiếp tục sự tương tự về kem của bạn: Tôi thích kem rất nhiều> trẻ em A1 Tôi thích> kem trẻ em B1> trẻ em C1 rất nhiều> trẻ em A2 Tôi thích> kem trẻ em B2 <trẻ em C2 rất nhiều ...
acarlon

Lần đầu tiên tôi thấy điều này ở đây: s1l3n0.blogspot.com/2013/04/ .
FrankHB

Có, tôi đã tinh chỉnh / mở rộng một chút câu trả lời của tôi trên một trong những ghi chú blog cá nhân của tôi. ;)
s1l3n0

5

Đồng thời là hình thức tổng quát của song song. Ví dụ chương trình song song cũng có thể được gọi là đồng thời nhưng ngược lại là không đúng.

  1. Có thể thực hiện đồng thời trên bộ xử lý đơn (nhiều luồng, được quản lý bởi bộ lập lịch hoặc nhóm luồng)

  2. Thực hiện song song là không thể trên bộ xử lý đơn nhưng trên nhiều bộ xử lý. (Một quy trình cho mỗi bộ xử lý)

  3. Điện toán phân tán cũng là một chủ đề liên quan và nó cũng có thể được gọi là điện toán đồng thời nhưng ngược lại là không đúng, giống như song song.

Để biết chi tiết đọc tài liệu nghiên cứu này Khái niệm về lập trình đồng thời


5

Tôi thực sự thích cách trình bày đồ họa này từ một câu trả lời khác - tôi nghĩ rằng nó trả lời câu hỏi tốt hơn nhiều so với các câu trả lời ở trên

Parallelism vs Concurrency Khi hai luồng đang chạy song song, cả hai đều chạy cùng một lúc. Ví dụ: nếu chúng ta có hai luồng, A và B, thì việc thực thi song song của chúng sẽ giống như thế này:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

Khi hai luồng đang chạy đồng thời, việc thực thi của chúng trùng nhau. Sự chồng chéo có thể xảy ra theo một trong hai cách: hoặc các luồng đang thực thi cùng một lúc (nghĩa là song song, như trên), hoặc các thực thi của chúng đang được xen kẽ trên bộ xử lý, như vậy:

CPU 1: A -----------> B ----------> A -----------> B -------- ->

Vì vậy, đối với các mục đích của chúng tôi, tính song song có thể được coi là một trường hợp đặc biệt của sự tương tranh

Nguồn: Một câu trả lời khác ở đây

Mong rằng sẽ giúp.


4

Tôi thực sự thích câu trả lời của Paul Butcher cho câu hỏi này (anh ấy là nhà văn của Bảy mô hình tương tranh trong bảy tuần ):

Mặc dù chúng thường bị nhầm lẫn, song song và đồng thời là những thứ khác nhau. Đồng thời là một khía cạnh của miền vấn đề Mã mãyyour cần xử lý nhiều sự kiện đồng thời (hoặc gần đồng thời) . Ngược lại, tính song song là một khía cạnh của miền giải pháp mà bạn muốn làm cho chương trình của bạn chạy nhanh hơn bằng cách xử lý song song các phần khác nhau của vấn đề. Một số cách tiếp cận được áp dụng cho đồng thời, một số cho song song và một số cho cả hai. Hiểu những gì bạn phải đối mặt và chọn công cụ phù hợp cho công việc.


3

Đồng thời có thể liên quan đến các tác vụ chạy đồng thời hoặc không (chúng thực sự có thể được chạy trong các bộ xử lý / lõi riêng biệt nhưng chúng cũng có thể được chạy trong "tích tắc"). Điều quan trọng là đồng thời luôn đề cập đến việc thực hiện một phần của một nhiệm vụ lớn hơn . Vì vậy, về cơ bản nó là một phần của một số tính toán. Bạn phải thông minh về những gì bạn có thể làm đồng thời và những gì không và cách đồng bộ hóa.

Song song có nghĩa là bạn chỉ đang làm một số việc cùng một lúc. Họ không cần phải là một phần của việc giải quyết một vấn đề. Ví dụ, chủ đề của bạn có thể giải quyết một vấn đề duy nhất. Tất nhiên công cụ đồng bộ hóa cũng được áp dụng nhưng từ quan điểm khác nhau.


3

"Đồng thời" là khi có nhiều thứ đang diễn ra .

"Song song" là khi mọi thứ đồng thời đang tiến triển cùng một lúc .


Ví dụ về đồng thời không có sự song song:

  • Nhiều luồng trên một lõi.
  • Nhiều tin nhắn trong hàng đợi tin nhắn Win32.
  • Nhiều SqlDataReader s trên kết nối MARS .
  • Nhiều JavaScript hứa hẹn trong một tab trình duyệt.

Tuy nhiên, lưu ý rằng sự khác biệt giữa đồng thời và song song thường là vấn đề về quan điểm. Các ví dụ trên không song song theo quan điểm (hiệu ứng có thể quan sát được) khi thực thi mã của bạn. Nhưng có sự song song ở mức hướng dẫn ngay cả trong một lõi đơn. Có những phần cứng làm việc song song với CPU và sau đó làm gián đoạn CPU khi hoàn thành. GPU có thể được vẽ lên màn hình trong khi bạn thủ tục cửa sổ hoặc trình xử lý sự kiện đang được thực thi. DBMS có thể duyệt qua B-Plants cho truy vấn tiếp theo trong khi bạn vẫn đang tìm nạp kết quả của truy vấn trước đó. Trình duyệt có thể thực hiện bố trí hoặc kết nối mạng trong khi bạn Promise.resolve()đang được thực thi. Vân vân...

Vì vậy, có bạn đi. Thế giới vẫn lộn xộn như mọi khi;)


3

Theo tôi, cách hiểu đơn giản và thanh lịch nhất là hai. Đồng thời cho phép xen kẽ thực thi và do đó có thể tạo ra ảo tưởng về sự song song. Điều này có nghĩa là một hệ thống đồng thời có thể chạy video Youtube của bạn cùng với việc bạn viết một tài liệu trong Word chẳng hạn. HĐH cơ bản, là một hệ thống đồng thời, cho phép các tác vụ đó xen kẽ việc thực thi của chúng. Bởi vì máy tính thực hiện các lệnh rất nhanh, điều này mang lại sự xuất hiện của hai việc cùng một lúc.

Xử lý song song là khi những điều đó thực sự song song. Trong ví dụ trên, bạn có thể thấy mã xử lý video đang được thực thi trên một lõi đơn và ứng dụng Word đang chạy trên một lõi khác. Lưu ý rằng điều này có nghĩa là một chương trình đồng thời cũng có thể song song! Cấu trúc ứng dụng của bạn với các luồng và quy trình cho phép chương trình của bạn khai thác phần cứng cơ bản và có khả năng được thực hiện song song.

Tại sao không có mọi thứ song song sau đó? Một lý do là bởi vì đồng thời là một cách cấu trúc các chương trình và là một quyết định thiết kế để tạo điều kiện phân tách các mối quan tâm, trong khi song song thường được sử dụng trong tên của hiệu suất. Một điều nữa là một số điều về cơ bản không thể được thực hiện song song. Một ví dụ về điều này sẽ là thêm hai thứ vào mặt sau của hàng đợi - bạn không thể chèn cả hai thứ cùng một lúc. Một cái gì đó phải đi đầu tiên và cái khác đằng sau nó, nếu không bạn làm rối tung hàng đợi. Mặc dù chúng ta có thể xen kẽ việc thực thi đó (và vì vậy chúng ta có một hàng đợi đồng thời), bạn không thể có nó song song.

Hi vọng điêu nay co ich!


3

Lập trình đồng thời liên quan đến các hoạt động có vẻ trùng lặp và chủ yếu liên quan đến sự phức tạp phát sinh do dòng điều khiển không xác định. Các chi phí định lượng liên quan đến các chương trình đồng thời thường là cả thông lượng và độ trễ. Các chương trình đồng thời thường bị ràng buộc IO nhưng không phải lúc nào cũng vậy, ví dụ: bộ thu gom rác đồng thời hoàn toàn trên CPU. Ví dụ sư phạm của một chương trình đồng thời là trình thu thập dữ liệu web. Chương trình này khởi tạo các yêu cầu cho các trang web và chấp nhận các phản hồi đồng thời khi kết quả tải xuống có sẵn, tích lũy một tập hợp các trang đã được truy cập. Luồng điều khiển là không xác định vì các phản hồi không nhất thiết phải nhận theo cùng một thứ tự mỗi khi chương trình được chạy. Đặc tính này có thể làm cho nó rất khó để gỡ lỗi các chương trình đồng thời. Một số ứng dụng về cơ bản đồng thời, ví dụ: máy chủ web phải xử lý đồng thời các kết nối máy khách. Erlang có lẽ là ngôn ngữ sắp tới hứa hẹn nhất cho lập trình đồng thời cao.

Lập trình song song liên quan đến các hoạt động được chồng chéo cho mục tiêu cụ thể là cải thiện thông lượng. Những khó khăn của lập trình đồng thời được tránh bằng cách xác định luồng điều khiển. Thông thường, các chương trình sinh ra các tập hợp các tác vụ con chạy song song và tác vụ cha chỉ tiếp tục sau khi mọi nhiệm vụ con kết thúc. Điều này làm cho các chương trình song song dễ dàng hơn để gỡ lỗi. Phần khó của lập trình song song là tối ưu hóa hiệu suất liên quan đến các vấn đề như độ chi tiết và giao tiếp. Cái sau vẫn là một vấn đề trong bối cảnh đa lõi vì có một chi phí đáng kể liên quan đến việc chuyển dữ liệu từ bộ đệm này sang bộ đệm khác. Nhân ma trận dày đặc ma trận là một ví dụ sư phạm về lập trình song song và nó có thể được giải quyết hiệu quả bằng cách sử dụng Straasen ' Thuật toán chia và chinh phục và tấn công các vấn đề phụ song song. Cilk có lẽ là ngôn ngữ hứa hẹn nhất để lập trình song song hiệu năng cao trên các máy tính dùng chung bộ nhớ (bao gồm cả đa lõi).

Sao chép từ câu trả lời của tôi: https://stackoverflow.com/a/3982782


2

Tính song song: Có nhiều luồng thực hiện nhiệm vụ tương tự độc lập với nhau về dữ liệu và tài nguyên mà chúng yêu cầu để thực hiện. Ví dụ: Trình thu thập dữ liệu của Google có thể sinh ra hàng ngàn luồng và mỗi luồng có thể thực hiện nhiệm vụ một cách độc lập.

Đồng thời: Đồng thời xuất hiện khi bạn chia sẻ dữ liệu, chia sẻ tài nguyên giữa các luồng. Trong một hệ thống giao dịch, điều này có nghĩa là bạn phải đồng bộ hóa phần quan trọng của mã bằng cách sử dụng một số kỹ thuật như Khóa, semaphores, v.v.


Đây phải là câu trả lời được chấp nhận IMO vì nó nắm bắt được bản chất của hai thuật ngữ.
michid

2

(Tôi khá ngạc nhiên khi một câu hỏi cơ bản như vậy không được giải quyết chính xác và gọn gàng trong nhiều năm ...)

Nói tóm lại, cả đồng thời và song song đều là thuộc tính của điện toán .

Về sự khác biệt, đây là lời giải thích từ Robert Harper :

Điều đầu tiên cần hiểu là song song không liên quan gì đến đồng thời . Đồng thời liên quan đến thành phần không xác định của các chương trình (hoặc các thành phần của chúng). Song song liên quan đến hiệu quả tiệm cận của các chương trình với hành vi xác định . Đồng thời là tất cả về việc quản lý không thể quản lý: các sự kiện đến vì những lý do ngoài tầm kiểm soát của chúng tôi và chúng tôi phải trả lời chúng. Một người dùng nhấp chuột, trình quản lý cửa sổ phải phản hồi, mặc dù màn hình đang đòi hỏi sự chú ý. Những tình huống như vậy vốn không đặc biệt, nhưng chúng tôi cũng sử dụng mẫu đơn chuyên nghiệpchủ nghĩa không xác định trong một thiết lập xác định bằng cách giả vờ rằng các thành phần báo hiệu các sự kiện theo thứ tự tùy ý và chúng ta phải đáp ứng với chúng khi chúng phát sinh. Thành phần không phá hủy là một ý tưởng cấu trúc chương trình mạnh mẽ. Song song, mặt khác, tất cả là về sự phụ thuộc giữa các tính toán con của một tính toán xác định. Kết quả là không nghi ngờ, nhưng có nhiều phương tiện để đạt được nó, một số hiệu quả hơn so với những người khác. Chúng tôi muốn khai thác những cơ hội đó để lợi thế của chúng tôi.

Chúng có thể là các loại thuộc tính trực giao trong các chương trình. Đọc bài đăng trên blog này để có thêm hình minh họa. Và điều này đã thảo luận nhiều hơn một chút về sự khác biệt về các thành phần trong lập trình , như các luồng.

Lưu ý rằng phân luồng hoặc đa nhiệm là tất cả các triển khai tính toán phục vụ các mục đích cụ thể hơn. Chúng có thể liên quan đến song song và đồng thời, nhưng không phải là một cách thiết yếu. Vì vậy, họ hầu như không phải là mục tốt để bắt đầu giải thích.

Thêm một điểm nổi bật: "vật lý" "thời gian" hầu như không liên quan gì đến các thuộc tính được thảo luận ở đây. Thời gian chỉ là một cách thực hiện phép đo để cho thấy tầm quan trọng của các tính chất, nhưng khác xa với bản chất. Hãy suy nghĩ hai lần vai trò của "thời gian" trong độ phức tạp thời gian - tương tự ít nhiều giống nhau, thậm chí phép đo thường có ý nghĩa hơn trong trường hợp đó.


2

"Đồng thời" đang làm mọi thứ - bất cứ điều gì - cùng một lúc. Chúng có thể là những thứ khác nhau, hoặc cùng một thứ. Mặc dù câu trả lời được chấp nhận, còn thiếu, nhưng đó không phải là "dường như cùng một lúc." Nó thực sự cùng một lúc. Bạn cần nhiều lõi CPU, sử dụng bộ nhớ dùng chung trong một máy chủ hoặc bộ nhớ phân tán trên các máy chủ khác nhau, để chạy mã đồng thời. Các đường ống gồm 3 nhiệm vụ riêng biệt đang chạy đồng thời cùng một lúc là một ví dụ: Nhiệm vụ cấp 2 phải chờ các đơn vị hoàn thành bởi cấp độ 1 và nhiệm vụ cấp 3 phải chờ các đơn vị công việc hoàn thành nhiệm vụ cấp 2. Một ví dụ khác là sự tương tranh của 1 nhà sản xuất với 1 người tiêu dùng; hoặc nhiều nhà sản xuất và 1 người tiêu dùng; độc giả và nhà văn; et al.

"Song song" đang làm những việc tương tự cùng một lúc. Nó đồng thời, nhưng hơn nữa đó là cùng một hành vi xảy ra cùng một lúc và điển hình nhất là trên các dữ liệu khác nhau. Đại số ma trận thường có thể được song song, bởi vì bạn có cùng một hoạt động chạy lặp lại: Ví dụ: tổng các cột của ma trận có thể được tính toán cùng một lúc bằng cách sử dụng cùng một hành vi (tổng) nhưng trên các cột khác nhau. Đây là một chiến lược phổ biến để phân vùng (tách) các cột giữa các lõi của bộ xử lý có sẵn, để bạn có cùng số lượng công việc (số lượng cột) được xử lý bởi mỗi lõi của bộ xử lý. Một cách khác để phân chia công việc là các công việc trong đó các công nhân hoàn thành công việc của họ quay lại với người quản lý, người giao việc và tự động làm việc nhiều hơn cho đến khi mọi việc được hoàn thành. Thuật toán bán vé là một thuật toán khác.

Không chỉ mã số có thể được song song. Các tập tin quá thường xuyên có thể được xử lý song song. Trong một ứng dụng xử lý ngôn ngữ tự nhiên, đối với mỗi trong số hàng triệu tệp tài liệu, bạn có thể cần phải đếm số lượng mã thông báo trong tài liệu. Điều này là song song, bởi vì bạn đang đếm mã thông báo, đó là hành vi giống nhau, cho mọi tệp.

Nói cách khác, song song là khi hành vi tương tự đang được thực hiện đồng thời. Đồng thời có nghĩa là cùng một lúc, nhưng không nhất thiết phải cùng một hành vi. Song song là một loại đồng thời đặc biệt trong đó điều tương tự đang xảy ra cùng một lúc.

Ví dụ, các thuật ngữ sẽ bao gồm các hướng dẫn nguyên tử, các phần quan trọng, loại trừ lẫn nhau, chờ đợi quay vòng, semaphores, màn hình, rào cản, truyền thông điệp, giảm bản đồ, nhịp tim, thuật toán bán vé, chủ đề, MPI, OpenMP.

Tác phẩm của Gregory Andrew là một cuốn sách giáo khoa hàng đầu về nó: Lập trình đa luồng, song song và phân phối.


1

Tuyệt vời, hãy để tôi lấy một kịch bản để hiển thị những gì tôi hiểu. giả sử có 3 đứa trẻ tên là: A, B, C. A và B nói chuyện, C lắng nghe. Cho A và B, chúng song song: A: Tôi là A. B: Tôi là B.

Nhưng đối với C, não của anh ta phải thực hiện quá trình đồng thời để nghe A và B, có thể: Tôi là IA am B.


1

Đồng thời đơn giản có nghĩa là nhiều hơn một nhiệm vụ đang chạy (không cần thiết song song). Ví dụ, chúng tôi có 3 nhiệm vụ tại bất kỳ thời điểm nào: nhiều hơn một có thể đang chạy hoặc tất cả có thể đang chạy cùng một lúc.

Song song có nghĩa là họ đang chạy song song. Vì vậy, trong trường hợp đó cả ba phải được chạy cùng một lúc.


1

Khái niệm "đồng thời" của Pike là một quyết định thiết kế và thực hiện có chủ ý. Một thiết kế chương trình có khả năng đồng thời có thể hoặc không thể hiện "tính song song" hành vi; nó phụ thuộc vào môi trường thời gian chạy.

Bạn không muốn sự song song được thể hiện bởi một chương trình không được thiết kế đồng thời. :-) Nhưng trong phạm vi mà nó đạt được cho các yếu tố liên quan (tiêu thụ năng lượng, hiệu suất, v.v.), bạn muốn một thiết kế đồng thời tối đa để hệ thống máy chủ có thể song song thực hiện khi có thể.

Ngôn ngữ lập trình Go của Pike minh họa điều này cực kỳ: các chức năng của anh ta là tất cả các luồng có thể chạy chính xác đồng thời, tức là gọi một hàm luôn tạo ra một luồng sẽ chạy song song với người gọi nếu hệ thống có khả năng. Một ứng dụng có hàng trăm hoặc thậm chí hàng ngàn chủ đề là hoàn toàn bình thường trong thế giới của anh ấy. (Tôi không phải là chuyên gia về Go, đó chỉ là do tôi đảm nhận.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.