Sự khác biệt giữa đồng thời và song song là gì?
Ví dụ được đánh giá cao.
Sự khác biệt giữa đồng thời và song song là gì?
Ví dụ được đánh giá cao.
Câu trả lời:
Đồ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.
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:
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:
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:
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ể.
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.
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 .
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...
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).
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 .
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
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:
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 go
từ 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?
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!
Đồng thời: Có nhiều phân tách đồng thời của nhiệm vụ! Một ví dụ:
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.
Để 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.
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.
Đồng thời: Nếu hai hoặc nhiều vấn đề được giải quyết bằng một bộ xử lý.
Tính song song: Nếu một vấn đề được giải quyết bằng nhiều bộ xử lý.
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)
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"
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.
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ẻ.
đồ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.
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.
Song song là thực thi đồng thời các quá trình trên một multiple cores per CPU
hoặ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)
Đồ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.
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 đó.
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".
Trong điện tử nối tiếp và song 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ự và đồ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.
Đồ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.
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)
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ý)
Đ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
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.
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.
Đồ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.
"Đồ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:
SqlDataReader
s trên kết nối MARS .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;)
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ự là 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!
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
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.
(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 đó.
"Đồ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.
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.
Đồ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.
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.)