Sự khác biệt giữa phương pháp đồng thời, song song và phương pháp không đồng bộ là gì?


177

Đồng thời có hai nhiệm vụ chạy song song trên các luồng riêng biệt. Tuy nhiên, các phương thức không đồng bộ chạy song song nhưng trên cùng một luồng. Làm thế nào đạt được điều này? Ngoài ra, những gì về song song?

Sự khác biệt giữa 3 khái niệm này là gì?


8
Thuật ngữ "không đồng bộ" có thể có nghĩa là rất nhiều thứ khác nhau. Những thuật ngữ này có liên quan, nhưng chúng không mô tả các bộ khác nhau. Các ý nghĩa chồng chéo và thay đổi theo tình huống.
Mũi nhọn

2
Vì vậy, đồng thời đầu tiên đang chạy hai hoặc nhiều quá trình cùng một lúc. Theo cách đó, việc đồng thời không phải là song song. Các quy trình song song yêu cầu hai hoặc nhiều lõi trong khi các quy trình đồng thời có thể chia sẻ thời gian một lõi.
Rick O'Shea

Câu trả lời:


139

Đồng thời và song song thực sự là cùng một nguyên tắc như bạn phỏng đoán chính xác, cả hai đều liên quan đến các tác vụ được thực thi đồng thời mặc dù tôi sẽ nói rằng các tác vụ song song phải thực sự đa nhiệm, được thực thi "cùng một lúc" trong khi đồng thời có thể có nghĩa là các tác vụ đang chia sẻ luồng thực thi trong khi vẫn xuất hiện để thực thi song song.

Các phương thức không đồng bộ không liên quan trực tiếp đến hai khái niệm trước, không đồng bộ được sử dụng để thể hiện ấn tượng của tác vụ đồng thời hoặc song song nhưng hiệu quả là một cuộc gọi phương thức không đồng bộ thường được sử dụng cho một quy trình cần thực hiện khỏi ứng dụng hiện tại và chúng tôi không Tôi không muốn chờ đợi và chặn ứng dụng của chúng tôi chờ phản hồi.

Ví dụ: việc lấy dữ liệu từ cơ sở dữ liệu có thể mất thời gian nhưng chúng tôi không muốn chặn giao diện người dùng của chúng tôi chờ dữ liệu. Cuộc gọi async nhận tham chiếu gọi lại và trả lại thực thi cho mã của bạn ngay khi yêu cầu được đặt với hệ thống từ xa. Giao diện người dùng của bạn có thể tiếp tục trả lời người dùng trong khi hệ thống từ xa thực hiện bất kỳ yêu cầu xử lý nào, một khi nó trả lại dữ liệu cho phương thức gọi lại của bạn thì phương thức đó có thể cập nhật giao diện người dùng (hoặc chuyển giao bản cập nhật đó) nếu phù hợp.

Từ góc độ người dùng, nó xuất hiện như đa nhiệm nhưng có thể không phải vậy.


BIÊN TẬP

Có lẽ đáng để thêm rằng trong nhiều lần triển khai, một cuộc gọi phương thức không đồng bộ sẽ khiến cho một luồng được tạo ra nhưng nó không cần thiết, nó thực sự phụ thuộc vào hoạt động được thực thi và cách phản hồi có thể được thông báo lại cho hệ thống.


34
Tôi cho rằng bạn có sự song song và đồng thời lẫn lộn trong đoạn đầu tiên của bạn. Đồng thời đề cập đến việc quản lý nhiều luồng thực thi, trong đó song song cụ thể hơn, nhiều luồng thực thi đồng thời. Đồng thời là thuật ngữ rộng hơn có thể bao hàm sự song song.
Đánh dấu H

7
Mặc dù hai từ này rất giống nhau và có thể bị nhầm lẫn (và thường là vậy), nhưng chúng có các định nghĩa khác nhau: Đồng thời = Hiện tại, xảy ra hoặc được thực hiện cùng một lúc. Song song = của hoặc liên quan đến hiệu suất rõ ràng hoặc thực tế của nhiều hoạt động tại một thời điểm, bởi cùng một hoặc các thiết bị khác nhau. Như bạn có thể thấy song song không nhất thiết có nghĩa là đồng thời mà có thể chỉ xuất hiện đồng thời. Vào cuối ngày, các từ thường được sử dụng thay thế cho nhau và với n dev là một căn phòng bạn có thể sẽ nhận được n + 1 định nghĩa;)
Lazarus

3
@Mehrdad Nếu bạn định căn cứ vào định nghĩa của bạn về từ điển trong việc sử dụng chúng trong các tài liệu tiếp thị thì tôi nghĩ bạn có thể thấy mình có phần bất lợi.
Lazarus

6
Sai lầm. Trong ngữ cảnh lập trình, đồng thời là khả năng mã của bạn được "tổng hợp" thành các bit logic thể chạy cùng lúc. Tính song song (khi kết hợp với đồng thời) đang lấy mã đã nói và chạy nó trên máy 100 lõi.
Frank Radocaj

2
@FrankRadocaj có quyền. Đồng thời có nghĩa là chương trình có thể được chia thành các đơn vị (đơn vị chủ yếu là các luồng) có thể được chạy theo bất kỳ thứ tự nào và có kết quả xác định. Song song có nghĩa là các đơn vị / luồng này đang được chạy theo nghĩa đen cùng một lúc trên nhiều bộ xử lý.

89

Nói ngắn gọn,

Đồng thời có nghĩa là nhiều nhiệm vụ bắt đầu, chạy và hoàn thành trong các khoảng thời gian chồng chéo, không theo thứ tự cụ thể. Tính song song là khi nhiều tác vụ HOẶC một số phần của một tác vụ duy nhất thực sự chạy cùng một lúc, ví dụ: trên bộ xử lý đa lõi.

Hãy nhớ rằng đồng thời và song song KHÔNG phải là điều tương tự.

Sự khác biệt giữa đồng thời so với song song

Bây giờ hãy liệt kê những khác biệt đáng chú ý giữa đồng thời và song song.

Đồng thời là khi hai 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. Song song là khi các nhiệm vụ thực sự chạy cùng một lúc, ví dụ. trên bộ xử lý đa lõi.

Đồng thời là thành phần của các quá trình thực thi độc lập, trong khi song song là việc thực hiện đồng thời các tính toán (có thể liên quan).

Đồ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.

Một ứng dụng có thể đồng thời - nhưng không song song, có nghĩa là nó xử lý nhiều hơn một nhiệm vụ cùng một lúc, nhưng không có hai tác vụ nào được thực thi cùng một lúc.

Một ứng dụng có thể song song - nhưng không đồng thời, có nghĩa là nó xử lý nhiều tác vụ phụ của một tác vụ trong CPU đa lõi cùng một lúc.

Một ứng dụng có thể không song song - cũng không đồng thời, có nghĩa là nó xử lý tất cả các nhiệm vụ một lần, theo tuần tự.

Một ứng dụng có thể vừa song song - vừa đồng thời, có nghĩa là nó xử lý đồng thời nhiều tác vụ trong CPU đa lõi cùng một lúc.

Đồng thời

Đồng thời về cơ bản có thể áp dụng khi chúng ta nói về tối thiểu hai nhiệm vụ trở lên. Khi một ứng dụng có khả năng thực thi hai nhiệm vụ gần như cùng một lúc, chúng ta gọi đó là ứng dụng đồng thời. Mặc dù ở đây các nhiệm vụ chạy trông giống như đồng thời, nhưng về cơ bản chúng KHÔNG THỂ. Họ tận dụng tính năng cắt thời gian CPU của hệ điều hành trong đó mỗi tác vụ chạy một phần nhiệm vụ của nó và sau đó chuyển sang trạng thái chờ. Khi tác vụ đầu tiên ở trạng thái chờ, CPU được gán cho tác vụ thứ hai để hoàn thành nhiệm vụ.

Hệ điều hành dựa trên mức độ ưu tiên của các tác vụ, do đó, gán CPU và các tài nguyên tính toán khác, ví dụ như bộ nhớ; lần lượt đến tất cả các nhiệm vụ và cho họ cơ hội hoàn thành. Đối với người dùng cuối, dường như tất cả các tác vụ đang chạy song song. Điều này được gọi là đồng thời.

Song song

Song song không yêu cầu hai nhiệm vụ để tồn tại. Nó thực sự chạy các phần của các tác vụ HOẶC nhiều tác vụ, đồng thời sử dụng cơ sở hạ tầng đa lõi của CPU, bằng cách gán một lõi cho mỗi tác vụ hoặc tác vụ phụ.

Song song đòi hỏi phần cứng với nhiều đơn vị xử lý, về cơ bản. Trong CPU lõi đơn, bạn có thể có được sự tương tranh nhưng KHÔNG song song.

Phương pháp không đồng bộ

Điều này không liên quan đến Đồng thời và song song, không đồng bộ được sử dụng để thể hiện ấn tượng của tác vụ đồng thời hoặc song song nhưng hiệu quả là một cuộc gọi phương thức không đồng bộ thường được sử dụng cho một quy trình cần thực hiện khỏi ứng dụng hiện tại và chúng tôi không muốn chờ đợi và chặn ứng dụng của chúng tôi chờ phản hồi.


2
Rất hữu ích. Cảm ơn
Neha

Tôi vẫn còn bối rối về Async vs concurrency. Tôi đã thấy cụm từ "chạy các nhiệm vụ không đồng bộ" và "chạy các nhiệm vụ đồng thời" được sử dụng. Chạy các tác vụ không đồng bộ và chạy các tác vụ đồng thời dường như có cùng một ý nghĩa?
Moondra

1
Tác vụ @Moondra Async chạy trên một luồng duy nhất, không có gì liên quan đến đa luồng. tác vụ async gửi một tác vụ đến một quy trình bên ngoài bên ngoài ứng dụng của bạn ... tức là cơ sở dữ liệu, trình đọc tệp ... đây là các quy trình IO sau đó một cuộc gọi lại được thêm vào quy trình để thực hiện một hành động khi quá trình IO kết thúc. Điều tôi không chắc là có một số tính năng "không đồng bộ" trong một số ngôn ngữ lập trình tạo ra một luồng mới riêng biệt khi bạn gọi một tác vụ không đồng bộ, tôi nghe nói C # là một nhưng tôi không chắc về điều đó
Tobi Owolawi

56

Đồng thời là khi việc thực thi nhiều tác vụ được xen kẽ, thay vì mỗi tác vụ được thực hiện tuần tự lần lượt.

Song song là khi các nhiệm vụ này thực sự được thực hiện song song.

nhập mô tả hình ảnh ở đây


Không đồng bộ là một khái niệm riêng biệt (mặc dù có liên quan trong một số bối cảnh). Nó đề cập đến thực tế là một sự kiện có thể xảy ra vào một thời điểm khác (không đồng bộ) với sự kiện khác. Các sơ đồ dưới đây minh họa sự khác biệt giữa thực thi đồng bộ và thực thi không đồng bộ, trong đó các tác nhân có thể tương ứng với các luồng, quy trình hoặc thậm chí các máy chủ khác nhau.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


6
Đơn giản, minh họa hiệu quả.
contactmatt

1
đồng thời giống như không đồng bộ?
số

1
Hai khái niệm này rất gần nhau, thực sự, nhưng không giống nhau. Trong thực tế, tính không đồng bộ có liên quan nhiều hơn với sự tương tác giữa các hành động (giả sử A & B), trong đó một (B) được kích hoạt bởi cái kia (A) và liệu cái thứ hai sẽ đợi cái thứ nhất hoàn thành hay không. Đồng thời là một thuật ngữ chung hơn cho các hành động cũng có thể không liên quan đến nhau và liệu chúng có được thực hiện theo trình tự hay các thực thi của chúng được xen kẽ.
Dimos

1
Vì vậy, sự không đồng bộ chủ yếu là về việc chặn và không chặn
Daniel

15

Mọi người đều gặp khó khăn khi liên kết không đồng bộ với song song hoặc đồng thời vì không đồng bộ không phải là một từ trái nghĩa với song song hoặc đồng thời. Nó là một từ trái nghĩa của Đồng bộ. Mà chỉ cho biết nếu một cái gì đó, trong trường hợp này chủ đề, sẽ được đồng bộ hóa với một cái gì đó khác, trong trường hợp này một chủ đề khác.


12

Có một số tình huống có thể xảy ra đồng thời:

Không đồng bộ - Điều này có nghĩa là chương trình của bạn thực hiện các hoạt động không chặn. Ví dụ, nó có thể bắt đầu một yêu cầu cho một tài nguyên từ xa thông qua HTTP và sau đó tiếp tục thực hiện một số nhiệm vụ khác trong khi nó chờ phản hồi được nhận. Nó giống như khi bạn gửi email và sau đó tiếp tục cuộc sống của bạn mà không cần chờ phản hồi.

Tính song song - Điều này có nghĩa là chương trình của bạn tận dụng phần cứng của các máy đa lõi để thực thi các tác vụ cùng một lúc bằng cách chia công việc thành các tác vụ, mỗi phần được thực hiện trên một lõi riêng. Nó giống như hát trong khi tắm: bạn thực sự đang làm hai việc cùng một lúc.

Đa luồng - Đây là một triển khai phần mềm cho phép các luồng khác nhau được thực thi đồng thời. Một chương trình đa luồng dường như đang thực hiện một số việc cùng một lúc ngay cả khi nó chạy trên máy đơn lõi. Điều này hơi giống như trò chuyện với những người khác nhau thông qua các cửa sổ IM khác nhau; mặc dù bạn thực sự chuyển đổi qua lại, kết quả cuối cùng là bạn có nhiều cuộc hội thoại cùng một lúc.


Đây là những tương tự thực sự tốt! Cảm ơn. Sẽ công bằng khi nói đồng thời có thể được định nghĩa với định nghĩa đa luồng của bạn? Vì vậy, concurrency = đa luồng trên một lõi đơn có vẻ như nó xảy ra cùng một lúc nhưng nó thực sự chuyển đổi qua lại thực sự nhanh chóng?
wongz

3

Đồng thời

Đồng thời có nghĩa là một ứng dụng đang đạt được tiến bộ trên nhiều nhiệm vụ cùng một lúc (đồng thời). Chà, nếu máy tính chỉ có một CPU, ứng dụng có thể không đạt được tiến bộ trên nhiều tác vụ cùng một lúc, nhưng nhiều hơn một tác vụ đang được xử lý tại một thời điểm bên trong ứng dụng. Nó không hoàn toàn hoàn thành một nhiệm vụ trước khi nó bắt đầu tiếp theo.

Song song

Tính song song có nghĩa là một ứng dụng chia các nhiệm vụ của nó thành các nhiệm vụ nhỏ hơn có thể được xử lý song song, ví dụ trên nhiều CPU cùng một lúc.

Đồng thời so với song song chi tiết

Như bạn có thể thấy, đồng thời có liên quan đến cách một ứng dụng xử lý nhiều tác vụ mà nó hoạt động. Một ứng dụng có thể xử lý một nhiệm vụ cùng một lúc (tuần tự) hoặc làm việc trên nhiều nhiệm vụ cùng một lúc (đồng thời).

Mặt khác, song song, liên quan đến cách một ứng dụng xử lý từng nhiệm vụ riêng lẻ. Một ứng dụng có thể xử lý nhiệm vụ một cách thanh thản từ đầu đến cuối hoặc chia nhiệm vụ thành các nhiệm vụ có thể được hoàn thành song song.

Như bạn có thể thấy, một ứng dụng có thể đồng thời, nhưng không song song. Điều này có nghĩa là nó xử lý nhiều hơn một nhiệm vụ cùng một lúc, nhưng các nhiệm vụ không được chia thành các nhiệm vụ.

Một ứng dụng cũng có thể song song nhưng không đồng thời. Điều này có nghĩa là ứng dụng chỉ hoạt động trên một nhiệm vụ tại một thời điểm và nhiệm vụ này được chia thành các nhiệm vụ có thể được xử lý song song.

Ngoài ra, một ứng dụng có thể không đồng thời hoặc song song. Điều này có nghĩa là nó chỉ hoạt động trên một nhiệm vụ tại một thời điểm và nhiệm vụ không bao giờ được chia thành các nhiệm vụ để thực hiện song song.

Cuối cùng, một ứng dụng cũng có thể đồng thời và song song, trong đó cả hai hoạt động trên nhiều tác vụ cùng một lúc và cũng chia từng nhiệm vụ thành các nhiệm vụ để thực hiện song song. Tuy nhiên, một số lợi ích của đồng thời và song song có thể bị mất trong kịch bản này, vì các CPU trong máy tính đã được giữ một cách hợp lý bận rộn chỉ với sự tương tranh hoặc song song. Kết hợp nó có thể dẫn đến chỉ đạt được hiệu suất nhỏ hoặc thậm chí mất hiệu suất. Hãy chắc chắn rằng bạn phân tích và đo lường trước khi bạn áp dụng mô hình song song đồng thời một cách mù quáng.

Từ http://tutorials.jenkov.com/java-concurrency/concurrency-vs- Championsism.html


3

Song song, tương đông :Đó là một thuật ngữ rộng có nghĩa là hai đoạn mã thực thi "cùng một lúc". Sẽ không thành vấn đề nếu đó là sự song song "thực sự" hoặc nếu nó được làm giả thông qua một số mẫu thiết kế thông minh. Vấn đề là bạn có thể bắt đầu "các nhiệm vụ" cùng một lúc và sau đó kiểm soát chúng một cách riêng biệt (với mutex và tất cả các thủ thuật thích hợp). Nhưng thông thường, bạn chỉ thích sử dụng từ "song song" cho song song "đúng", như trong: bạn thực hiện điều đó thông qua đa nhiệm không hợp tác (cho dù là làm mờ lõi CPU / GPU hoặc chỉ ở cấp độ phần mềm bằng cách để HĐH quản lý nó ở mức rất thấp). Mọi người không muốn nói "song song" chỉ với mã tuần tự phức tạp tạo ra sự song song, như bạn tìm thấy trong javascript của cửa sổ trình duyệt chẳng hạn. Do đó, lý do tại sao những người trong chủ đề này nói "không đồng bộ không liên quan gì đến song song". Vâng, nhưng đừng nhầm lẫn chúng.

Đồng thời: không thể có sự tương tranh mà không có sự song song (dù là mô phỏng hay thực tế, như tôi đã giải thích ở trên), nhưng thuật ngữ này tập trung cụ thể vào thực tế là hai hệ thống sẽ cố gắng truy cập cùng một tài nguyên tại một thời điểm. Nó nhấn mạnh vào thực tế là bạn sẽ phải đối phó với điều đó.

Không đồng bộ : mọi người đều đúng khi nói rằng không đồng bộ không liên quan đến song song, nhưng nó mở đường cho nó (gánh nặng là ở bạn để làm cho mọi thứ song song hoặc không - tiếp tục đọc).

"Không đồng bộ" dùng để chỉ một đại diện của song song chính thức hóa ba điều cơ bản thường liên quan đến song song: 1) xác định khởi tạo của nhiệm vụ (nói khi nào nó bắt đầu và tham số nào nhận được), 2) phải làm gì sau khi kết thúc và 3) Những gì mã nên tiếp tục làm giữa.

Nhưng nó vẫn chỉ là cú pháp (thường được biểu diễn dưới dạng phương thức gọi lại). Đằng sau bối cảnh, hệ thống cơ bản có thể chỉ đơn giản quyết định rằng những "nhiệm vụ" này chỉ là những đoạn mã để chồng chất cho đến khi hoàn thành mã mà nó hiện đang thực thi. Và sau đó nó bỏ xếp từng cái một và thực hiện chúng tuần tự. Hay không. Nó cũng có thể tạo ra một luồng cho mỗi tác vụ và chạy chúng song song. Ai quan tâm? Phần đó không được bao gồm trong khái niệm;)


2

Có một chút ngữ nghĩa để làm rõ ở đây:

Đồng thời hay song song là một câu hỏi về sự tranh chấp tài nguyên , trong khi không đồng bộ là về luồng điều khiển .

Các quy trình khác nhau (hoặc các hoạt động cấu thành của chúng ) được gọi là Không đồng bộ, khi không có triển khai xác định thứ tự xử lý ; nói cách khác, có khả năng bất kỳ ai trong số họ có thể được xử lý tại bất kỳ thời điểm nào. Theo định nghĩa, nhiều bộ xử lý (ví dụ CPU hoặc Người) cho phép một vài trong số chúng được xử lý cùng một lúc; trên một bộ xử lý, quá trình xử lý của chúng được xen kẽ (ví dụ Chủ đề).

Các thủ tục hoặc hoạt động không đồng bộ được gọi là Đồng thời, khi chúng chia sẻ tài nguyên ; Đồng thời là khả năng tranh chấp nhất định tại bất kỳ thời điểm nào. Tính song song được đảm bảo một cách tầm thường khi không có tài nguyên nào được chia sẻ (ví dụ: bộ xử lý và lưu trữ khác nhau); mặt khác, phải kiểm soát đồng thời.

Do đó, một quy trình hoặc thao tác không đồng bộ có thể được xử lý song song hoặc đồng thời với các quy trình khác.


2

Đồng thời có nghĩa là thực thi nhiều nhiệm vụ cùng một lúc nhưng không nhất thiết phải đồng thời. Khi bạn phải thực hiện nhiều hơn một nhiệm vụ nhưng bạn có một tài nguyên duy nhất thì chúng tôi sẽ tiến hành đồng thời. Trong môi trường lõi đơn đồng thời đạt được bằng cách chuyển đổi bối cảnh.

Song song giống như thực hiện đồng thời nhiều hơn một nhiệm vụ như bạn có thể hát và tắm cùng nhau. Bây giờ bạn đang làm nhiệm vụ song song.

Không đồng bộ là một cái gì đó có liên quan đến thực thi luồng trong mô hình không đồng bộ khi một tác vụ được thực thi, bạn có thể chuyển sang một tác vụ khác mà không cần chờ đợi trước đó để hoàn thành.

Lập trình không đồng bộ giúp chúng ta đạt được đồng thời. Lập trình không đồng bộ trong môi trường đa luồng là một cách để đạt được sự song song.


2

"Đồng bộ hóa và không đồng bộ là các mô hình lập trình. Đồng thời và song song là cách các tác vụ được thực thi ...". Nguồn: https://medium.com/better-programming/sync-vs-async-vs-conciverse-vs-abul-5754cdb60f66

Nói cách khác, đồng bộ hóa và không đồng bộ mô tả cách chương trình của bạn thực thi khi thực hiện một cuộc gọi chức năng (nó sẽ chờ hay nó sẽ tiếp tục thực hiện?), Trong khi mô tả đồng thời và song song cách thức một chức năng (một tác vụ) sẽ được thực thi (đồng thời = có thể được thực thi tại đồng thời, song song = thực hiện hiệu quả cùng một lúc).


phương tiện không phải là một nguồn, nó là một bài viết của một người khác nói về sự hiểu biết (sai lầm) của anh ấy về một chủ đề, nó không làm cho anh ấy / cô ấy có thẩm quyền.
Moha lạc đà toàn năng

1
Đó là một trích dẫn, do đó là nguồn. Hầu hết các câu trả lời ở đây không được viết bởi các nhà chức trách trong bất kỳ lĩnh vực nào và lời giải thích mà tác giả đưa ra là đủ tốt.
Pedro Boechat

Tại stackoverflow, bạn ít nhất có một hệ thống bầu cử và đó là một cộng đồng chuyên gia. Bất cứ ai cũng có thể viết bất cứ điều gì trên phương tiện. Đó không phải là một so sánh công bằng giữa hai.
Moha lạc đà toàn năng

1
Bất cứ ai cũng có thể viết bất cứ điều gì ở đây, tôi không biết tại sao bạn chọn trên Medium. Dù sao, tôi là một lập trình viên chuyên nghiệp và tôi tán thành sự hiểu biết này. Và tôi thấy nó thanh lịch vì nó tương đối ngắn.
Pedro Boechat

Vấn đề không phải là Medium là một nguồn xấu, vấn đề là một câu trả lời chỉ liên kết đến một trang bên ngoài không phải là một câu trả lời. Bạn có thể cải thiện đáng kể câu trả lời này nếu bạn xây dựng phần trích dẫn hoặc tóm tắt nội dung của bài viết thay vì chỉ liên kết với nó.
David Schwartz

1

CONCURRENCY VS PARALLELISM: đồng thời tại một thời điểm chỉ có thể thực hiện một nhiệm vụ. ví dụ: song song bộ xử lý cpu tại một điểm chúng ta có thể thực hiện nhiều tác vụ. ví dụ: bộ xử lý lõi kép hoặc đa lõi


1

Ở đây tôi giải thích với một số ví dụ


Song song

Một GPU sử dụng xử lý song song để xử lý cùng một khối mã (AKA kernel ) trên hàng ngàn đề vật lý và logic. Lý tưởng nhất, quá trình bắt đầu và kết thúc cho tất cả các chủ đề cùng một lúc. Một lõi CPU đơn mà không siêu phân luồng có thể thực hiện xử lý song song.

Lưu ý: Tôi đã nói một cách lý tưởng bởi vì khi bạn chạy kernel với kích thước 7 triệu cuộc gọi trên phần cứng với các luồng 6M, nó phải chạy hai lần chạy cùng một mã trên tất cả các luồng 6M trong khi vẫn tiêu thụ tất cả các luồng 6M mỗi lần.

  • một nhân (một đoạn mã) được thực thi trên nhiều bộ xử lý
  • đồng thời
  • với một chuỗi thực thi duy nhất (một hạt nhân phải làm điều tương tự trong tất cả các luồng, vì vậy nên tránh "phân nhánh" hoặc "nếu" vì chúng sẽ tiêu tốn tài nguyên mạnh mẽ bằng cách tạo ra nhiều NOP (không hoạt động) để đồng bộ hóa tất cả các luồng)
  • về cơ bản tăng tốc độ mạnh mẽ
  • hạn chế đáng kể những gì bạn có thể làm
  • phụ thuộc nhiều vào phần cứng

Lưu ý: Tính song song không giới hạn đối với GPU.


Đồng thời

Một dịch vụ web nhận được nhiều yêu cầu nhỏ trong thời gian thực và nó cần xử lý từng yêu cầu khác nhau, bất cứ lúc nào và độc lập với các yêu cầu khác hoặc bất kỳ công việc nội bộ nào. Tuy nhiên, bạn muốn dịch vụ web luôn hoạt động mà không làm hỏng trạng thái dữ liệu hoặc tình trạng của hệ thống.

Chỉ cần tưởng tượng một người dùng đang cập nhật một bản ghi và một người dùng khác xóa cùng một bản ghi cùng một lúc.

  • nhiều nhiệm vụ được thực thi
  • trong thời gian thực (hoặc bất cứ khi nào có yêu cầu)
  • với các chuỗi thực thi khác nhau (không giống như kernel trong xử lý song song, các tác vụ đồng thời có thể làm những việc khác nhau, rất có thể bạn phải xếp hàng hoặc ưu tiên chúng)
  • về cơ bản cải thiện thời gian phản hồi trung bình vì nhiệm vụ # 2 không phải đợi nhiệm vụ # 1 hoàn thành
  • về cơ bản hy sinh thời gian tính toán vì nhiều nhiệm vụ đang chạy cùng một lúc và có nguồn lực hạn chế
  • cần quản lý đúng cách các tài nguyên được chia sẻ để nó không bị bế tắc hoặc làm hỏng dữ liệu.

Lưu ý : Những yêu cầu này thường tiêu thụ một số tài nguyên thiết yếu như bộ nhớ, kết nối cơ sở dữ liệu hoặc băng thông. Tuy nhiên, bạn muốn dịch vụ web luôn được đáp ứng. Không đồng bộ là chìa khóa để làm cho nó phản ứng nhanh chứ không phải đồng thời


Không đồng bộ

Một quy trình nặng (như thao tác I / O) có thể dễ dàng chặn GUI nếu nó chạy trên luồng GUI. Để đảm bảo đáp ứng UI , một quy trình nặng có thể được thực thi không đồng bộ. Nó là tốt hơn để chạy từng hoạt động async tương tự tại một thời điểm . ví dụ: nhiều hoạt động ràng buộc IO có thể chậm hơn đáng kể nếu chạy cùng một lúc, vì vậy tốt hơn là xếp hàng chúng kết thúc để bắt đầu

  • một tác vụ hoặc một loạt các tác vụ được thực thi trên một luồng khác
  • một lần
  • nếu có một nhiệm vụ, thì không có trình tự nào để bạn đợi nó hoàn thành hoặc bạn quên và quên
  • nếu đó là một loạt các nhiệm vụ thì bạn có thể quên và quên tất cả cùng một lúc, đợi tất cả kết thúc hoặc chạy từng kết thúc nhiệm vụ để bắt đầu
  • về cơ bản làm giảm hiệu suất vì các chi phí chung
  • cung cấp khả năng phản hồi cho một luồng khác (có hiệu quả chống chặn luồng UI hoặc các luồng cần thiết khác)

Lưu ý: một hoạt động không đồng bộ được thực hiện đồng thời (nghĩa là nhiều lần một lần) là một hoạt động đồng thời.


Lưu ý: Đồng thời và không đồng bộ thường bị nhầm lẫn với nhau. Đồng thời đề cập đến các phần khác nhau của hệ thống làm việc cùng nhau mà không can thiệp lẫn nhau (những vấn đề này thường được giải quyết bằng khóa, semaphors hoặc mutexes). Không đồng bộ là cách bạn đạt được khả năng đáp ứng (chẳng hạn như phân luồng).

* Lưu ý: Không đồng bộ và đa luồng thường bị nhầm lẫn với nhau. Mã không đồng bộ không nhất thiết phải liên quan đến một luồng mới. nó có thể là hoạt động phần cứng hoặc như Stephan gọi đó là hoạt động thuần túy, hãy đọc nó

ví dụ: trong mã WPF + C # bên dưới, await Task.Run(()=> HeavyMethod(txt))đang giải quyết vấn đề không đồng bộ, trong khi textBox.Dispatcher.Invokeđang giải quyết vấn đề tương tranh:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

Tôi sẽ làm cho nó ngắn gọn và thú vị để quấn đầu bạn xung quanh những khái niệm này.

Đồng thời so với song song - Cách thực hiện các nhiệm vụ.

Lấy một ví dụ trong cuộc sống thực: Có một thử thách đòi hỏi bạn phải ăn cả một chiếc bánh lớn và hát cả một bài hát. Bạn sẽ giành chiến thắng nếu bạn là người nhanh nhất hát toàn bộ bài hát và hoàn thành chiếc bánh. Vì vậy, quy tắc là bạn hát và ăn đồng thời . Làm thế nào bạn làm điều đó không thuộc về quy tắc. Bạn có thể ăn toàn bộ bánh, sau đó hát toàn bộ bài hát, hoặc bạn có thể ăn một nửa bánh, sau đó hát nửa bài hát, sau đó làm lại, v.v.

Parallelism là một loại đồng thời cụ thể trong đó các tác vụ thực sự được thực hiện đồng thời. Trong khoa học máy tính, sự song song chỉ có thể đạt được trong môi trường đa lõi.

Đồng bộ so với không đồng bộ - Các mô hình lập trình.

Đồng bộ hóa, bạn viết mã dưới dạng các bước được thực hiện theo thứ tự, từ trên xuống dưới. Trong mô hình lập trình async, bạn viết mã dưới dạng các tác vụ, sau đó được thực thi đồng thời. Thực hiện đồng thời có nghĩa là tất cả các nhiệm vụ có khả năng được thực hiện cùng một lúc.

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.