Thực thi không đồng bộ và thực thi đồng bộ, nó thực sự có nghĩa là gì? [đóng cửa]


1186

Sự khác biệt giữa thực thi không đồng bộ và thực hiện đồng bộ là gì?


... hoặc thực thi "tuần tự và song song" ... mặc dù song song thực sự đòi hỏi nhiều lõi, nếu không thì nó được xen kẽ một cách hợp lý.
samis

8
Tôi đã từng nhầm lẫn cả hai thuật ngữ và cách tôi đã làm để nhớ sự khác biệt là ném chữ "A" đầu tiên trong " A JAX", viết tắt của từ không đồng bộ, trong JavaScript khi bạn yêu cầu AJAX trong một vòng lặp mà họ không chờ đợi lẫn nhau hoặc chặn quá trình, vì trình duyệt không muốn tác động đến trải nghiệm người dùng với một trang web bị đóng băng, tất cả các yêu cầu được gửi gần như cùng một lúc mà không cần chờ phản hồi của yêu cầu trước đó. Đó là không đồng bộ
Kế toán م

Câu trả lời:


1748

Khi bạn thực hiện một cái gì đó đồng bộ, bạn đợi nó kết thúc trước khi chuyển sang một nhiệm vụ khác. Khi bạn thực hiện một cái gì đó không đồng bộ, bạn có thể chuyển sang một nhiệm vụ khác trước khi nó hoàn thành.

Điều đó đang được nói, trong bối cảnh của các máy tính, điều này chuyển thành thực thi một quy trình hoặc tác vụ trên một "luồng" khác. Một luồng là một chuỗi các lệnh (một khối mã) tồn tại như một đơn vị công việc. Hệ điều hành có thể quản lý nhiều luồng và chỉ định một luồng ("lát") thời gian của bộ xử lý trước khi chuyển sang luồng khác để thực hiện lần lượt một số công việc. Tại cốt lõi của nó (tha thứ cho trò chơi chữ), một bộ xử lý có thể thực hiện một lệnh đơn giản, nó không có khái niệm làm hai việc cùng một lúc. Hệ điều hành mô phỏng điều này bằng cách phân bổ các lát thời gian cho các luồng khác nhau.

Bây giờ, nếu bạn giới thiệu nhiều lõi / bộ xử lý vào hỗn hợp, thì mọi thứ thực sự có thể xảy ra cùng một lúc. Hệ điều hành có thể phân bổ thời gian cho một luồng trên bộ xử lý đầu tiên, sau đó phân bổ cùng một khối thời gian cho một luồng khác trên một bộ xử lý khác. Tất cả điều này là về việc cho phép hệ điều hành quản lý việc hoàn thành nhiệm vụ của bạn trong khi bạn có thể tiếp tục trong mã của mình và làm những việc khác.

Lập trình không đồng bộ là một chủ đề phức tạp vì ngữ nghĩa của cách mọi thứ liên kết với nhau khi bạn có thể thực hiện chúng cùng một lúc. Có rất nhiều bài báo và sách về chủ đề này; có một cái nhìn


246
Điều hoàn toàn làm tôi bối rối là phương tiện đồng bộ "cùng một lúc", nhưng khi được sử dụng theo nghĩa trên, nó có nghĩa là tuần tự và không đồng bộ có nghĩa là "không cùng một lúc" ... ?? Ai đó có thể giải thích xung đột này?
Damien Roche

45
@Zenph: Trong bối cảnh này, toàn bộ khối mã là điều chúng tôi quan tâm. Đồng bộ có nghĩa là khối được thực thi cùng một lúc (mặc dù, có, các thành phần được thực hiện tuần tự). Không đồng bộ có nghĩa là khối không phải được thực hiện cùng một lúc.
Adam Robinson

8
Việc thực thi không đồng bộ cũng xảy ra khi một chương trình gửi tin nhắn đến hàng đợi (như trong các hệ thống nhắn tin, như ActiveMQ, WebSphere MQ, HornetQ, MSMQ, v.v.). Trong trường hợp này, cuộc gọi không đồng bộ không liên quan đến lập trình đa luồng hoặc xử lý đồng thời ở cấp độ HĐH.
Paulo Merson

287
Thật kỳ lạ "Đồng bộ" có nghĩa là "sử dụng cùng một đồng hồ" vì vậy khi hai hướng dẫn được đồng bộ hóa, chúng sử dụng cùng một đồng hồ và phải xảy ra lần lượt từng đồng hồ. "Không đồng bộ" có nghĩa là "không sử dụng cùng một đồng hồ", vì vậy các hướng dẫn không liên quan đến việc đồng hành với nhau. Đó là lý do tại sao nó nhìn về phía sau, thuật ngữ này không đề cập đến mối quan hệ hướng dẫn với nhau. Đó là đề cập đến từng mối quan hệ hướng dẫn với đồng hồ. Mong rằng sẽ giúp.
Tom Padilla

14
Các điều khoản đến từ kỹ thuật. vi.wikipedia.org/wiki/Asynyncous_system
Tom Padilla

1151

Đồng bộ / không đồng bộ ĐÃ KHÔNG LÀM GÌ VỚI ĐA NĂNG.

Đồng bộ hoặc Đồng bộ hóa có nghĩa là "được kết nối" hoặc "phụ thuộc" theo một cách nào đó. Nói cách khác, hai nhiệm vụ đồng bộ phải nhận thức được nhau và một nhiệm vụ phải thực thi theo một cách nào đó phụ thuộc vào nhau, chẳng hạn như chờ đợi để bắt đầu cho đến khi nhiệm vụ khác hoàn thành.
Không đồng bộ có nghĩa là chúng hoàn toàn độc lập và không ai phải xem xét cái khác theo bất kỳ cách nào, kể cả khi bắt đầu hoặc thực hiện.

Đồng bộ (một luồng):

1 thread ->   |<---A---->||<----B---------->||<------C----->|

Đồng bộ (đa luồng):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Không đồng bộ (một luồng):

         A-Start ------------------------------------------ A-End   
           | B-Start -----------------------------------------|--- B-End   
           |    |      C-Start ------------------- C-End      |      |   
           |    |       |                           |         |      |
           V    V       V                           V         V      V      
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->| 

Không đồng bộ (đa luồng):

 thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • Điểm bắt đầu và điểm kết thúc của các nhiệm vụ A, B, C được đại diện bởi <, các >ký tự.
  • Các lát cắt thời gian của CPU được biểu thị bằng các thanh dọc |

Về mặt kỹ thuật, khái niệm đồng bộ / không đồng bộ thực sự không liên quan gì đến các luồng . Mặc dù, nói chung, thật bất thường khi tìm thấy các tác vụ không đồng bộ chạy trên cùng một luồng, có thể, (xem ví dụ bên dưới) và thường thấy hai hoặc nhiều tác vụ thực thi đồng bộ trên các luồng riêng biệt ... Không, khái niệm này của đồng bộ / không đồng bộ đã làm chỉ với có hay không một nhiệm vụ thứ hai hoặc sau này có thể được bắt đầu trước khi người kia (đầu tiên) nhiệm vụ đã hoàn thành, hoặc cho dù đó phải chờ đợi. Đó là tất cả. Chủ đề nào (hoặc chủ đề), hoặc quy trình hoặc CPU, hoặc thực sự, phần cứng nào, tác vụ [s] được thực thi trên không liên quan. Thật vậy, để làm cho điểm này tôi đã chỉnh sửa đồ họa để hiển thị điều này.


VÍ DỤ ASYNCHRONOUS:

Để giải quyết nhiều vấn đề kỹ thuật, phần mềm được thiết kế để phân chia vấn đề tổng thể thành nhiều nhiệm vụ riêng lẻ và sau đó thực hiện chúng không đồng bộ. Đảo ngược một ma trận, hoặc một vấn đề phân tích phần tử hữu hạn, là những ví dụ tốt. Trong điện toán, sắp xếp một danh sách là một ví dụ. Ví dụ, thói quen quicksort, chia danh sách thành hai danh sách và thực hiện quicksort trên mỗi danh sách, gọi chính nó (quicksort) theo cách đệ quy. Trong cả hai ví dụ trên, hai tác vụ có thể (và thường là) được thực thi không đồng bộ. Họ không cần phải ở trên các chủ đề riêng biệt. Ngay cả một máy có một CPU và chỉ một luồng thực thi có thể được mã hóa để bắt đầu xử lý tác vụ thứ hai trước khi hoàn thành nhiệm vụ thứ nhất. Tiêu chí duy nhất là kết quả của một nhiệm vụ không cần thiết làm đầu vào cho nhiệm vụ khác. Miễn là thời gian bắt đầu và kết thúc của các tác vụ trùng nhau, (chỉ có thể nếu đầu ra của không cần thiết là đầu vào cho cái khác), chúng sẽ được thực thi không đồng bộ, bất kể có bao nhiêu luồng được sử dụng.

VÍ DỤ TỔNG HỢP:

Bất kỳ quy trình bao gồm nhiều tác vụ trong đó các tác vụ phải được thực hiện theo trình tự, nhưng một tác vụ phải được thực hiện trên một máy khác (Tìm nạp và / hoặc cập nhật dữ liệu, nhận báo giá chứng khoán từ dịch vụ tài chính, v.v.). Nếu trên một máy riêng biệt, nó nằm trên một luồng riêng biệt, cho dù là đồng bộ hay không đồng bộ.


92
Tại sao trên thế giới, các từ có nghĩa là những thứ khác nhau trong máy tính ... luôn khiến tôi quay trở lại ... từ điển này .. đồng bộ: xảy ra cùng một lúc. không đồng bộ: không xảy ra cùng một lúc.
Muhammad Umer

17
nhưng như bạn có thể thấy trong máy tính, điều đó có nghĩa ngược lại
Muhammad Umer

5
Có thể danh pháp dựa trên việc bắt đầu các nhiệm vụ có được "đồng bộ hóa" với việc hoàn thành các nhiệm vụ khác không?
Charles Bretana

11
@MuhammadUmer: trong thế giới máy tính, xảy ra cùng một lúc được gọi là đồng thời.
Roy Ling

5
IMHO, những hình ảnh này không phải tất cả đều mô tả việc thực thi các tác vụ đồng bộ và không theo chu kỳ Ví dụ, hình ảnh thứ hai ngụ ý rằng các tác vụ không đồng bộ yêu cầu một số luồng. Trên thực tế, nó không. Và các nhiệm vụ đó phải chạy song song, đó không phải là một yêu cầu là tốt. Hoặc, hình ảnh "đồng bộ" thể hiện rất rõ cách thức các tác vụ được gửi không đồng bộ từ một số trang web cuộc gọi và hiện đang thực thi trong bộ lập lịch tác vụ nối tiếp;) IMO, các hình ảnh bị sai lệch.
CouchDeveloper

642

Nói một cách đơn giản hơn:

Đồng bộ hóa

Bạn đang xếp hàng để lấy vé xem phim. Bạn không thể có được một cái cho đến khi mọi người trước mặt bạn có được một cái, và điều tương tự cũng áp dụng cho những người xếp hàng phía sau bạn.

HỎI

Bạn đang ở trong một nhà hàng với nhiều người khác. Bạn gọi món ăn của bạn. Những người khác cũng có thể gọi món ăn của họ, họ không phải đợi thức ăn của bạn được nấu chín và phục vụ cho bạn trước khi họ có thể gọi món. Trong bếp nhà hàng công nhân liên tục nấu ăn, phục vụ và nhận đơn đặt hàng. Mọi người sẽ nhận được thức ăn của họ phục vụ ngay sau khi nó được nấu chín.


10
Nếu ai đó muốn táo so với táo; Nếu bạn muốn kịch bản nhà hàng được đồng bộ, thì khi bạn gọi đồ ăn, mọi người khác trong nhà hàng sẽ phải đợi đồ ăn của bạn đến trước khi họ có thể gọi món ăn của họ, v.v ... Bây giờ đây có vẻ như là một kịch bản thực sự ngu ngốc, nhưng trong thế giới điện toán, kịch bản này có thể hữu ích. Nói rằng mỗi khách hàng không thể quyết định những gì họ muốn, và thay vào đó muốn xem những gì khách hàng trước đó đặt hàng để quyết định xem họ có muốn điều đó hay không, thì điều đó có nghĩa là họ phải đợi thực phẩm đến trước khi đặt hàng.
Fonix

Chỉ cần thêm vào ... nó có thể để các hoạt động thực thi như trong một hàng đợi trong các hoạt động không đồng bộ ... Nhưng điều đó không bắt buộc chút nào.
Saletanth Karumanaghat

5
ví dụ rất đơn giản và thực tế
Manish

Để đẩy ví dụ của bạn hơn nữa, họ có thể xem xét một số cổng để bán vé. Do đó, mỗi dòng có thể hoạt động không đồng bộ từ dòng khác nhưng đồng bộ trong chính nó!
Saeed Ahadian

334

Giải thích đơn giản thông qua sự tương tự

Thi công đồng bộ

Sếp tôi là một người bận rộn. Anh ấy bảo tôi viết mã. Tôi nói với anh ta: Tốt thôi. Tôi bắt đầu và anh ấy xem tôi như một con kền kền, đứng sau lưng tôi, rời khỏi vai tôi. Tôi thích "Dude, WTF: tại sao bạn không đi và làm gì đó trong khi tôi hoàn thành việc này?"

anh ấy nói: "Không, tôi đang đợi ở đây cho đến khi bạn hoàn thành." Điều này là đồng bộ.

Thi công không đồng bộ

Sếp bảo tôi làm việc đó, và thay vì chờ đợi công việc của tôi, sếp nghỉ việc và làm những công việc khác. Khi tôi hoàn thành công việc của mình, tôi chỉ cần báo cáo với sếp của mình và nói: "TÔI ĐANG LÀM!" Đây là thực thi không đồng bộ.

(Hãy nghe lời khuyên của tôi: KHÔNG BAO GIỜ làm việc với ông chủ đằng sau bạn.)


29
Tôi đang làm ... thậm chí còn buồn cười hơn khi bạn coi đây là sự cam chịu.
Daedric

91

Thực thi đồng bộ có nghĩa là thực thi xảy ra trong một chuỗi duy nhất. A->B->C->D. Nếu bạn đang gọi những thói quen đó, Asẽ chạy, sau đó kết thúc, sau đó Bsẽ bắt đầu, sau đó kết thúc, sau đó Csẽ bắt đầu, v.v.

Với thực thi không đồng bộ , bạn bắt đầu một thói quen và để nó chạy trong nền trong khi bạn bắt đầu tiếp theo, sau đó, tại một thời điểm nào đó, hãy nói "đợi điều này kết thúc". Nó giống như:

Bắt đầu A->B->C->D->Chờ cho Ađến khi kết thúc

Ưu điểm là bạn có thể thực thi B, Cvà hoặc Dtrong khi Avẫn đang chạy (trong nền, trên một luồng riêng biệt), do đó bạn có thể tận dụng tốt hơn các tài nguyên của mình và có ít "treo" hoặc "chờ" hơn.


@ Reed Copsey ...... Cảm ơn bạn đã giải thích tốt như vậy ..... Chỉ muốn biết thêm thông tin về Async-Exec ...... Dựa trên câu trả lời của bạn trong Async Exec .... Bắt đầu A-> B-> C-> D-> Đợi A kết thúc ... Vậy tất cả A, B, C, D bắt đầu tại một thời điểm ...... và họ chờ A kết thúc ..... Vậy là xong B sẽ chỉ kết thúc sau khi A kết thúc, và C sau B và cứ thế ......? Hoặc B có thể hoàn thành đầu tiên và sau đó A có thể kết thúc?
Devrath

8
@Devrath Các hoạt động có thể kết thúc theo thứ tự bất kỳ.
Sậy Copsey

59

Tóm lại, đồng bộ hóa đề cập đến hai hoặc nhiều điểm bắt đầu và điểm kết thúc của quá trình , KHÔNG phải là sự thực thi của chúng . Trong ví dụ này, điểm cuối của Quy trình A được đồng bộ hóa với điểm bắt đầu của Quy trình B:

Đồng bộ hóa
   | -------- A -------- |
                     | -------- B -------- |

Quá trình không đồng bộ, mặt khác, đừng không có khởi đầu và điểm cuối của họ đồng bộ:

HỎI
   | -------- A -------- |
         | -------- B -------- |

Khi Quy trình A chồng lấp Quy trình B, chúng đang chạy đồng thời hoặc đồng bộ (định nghĩa từ điển), do đó gây nhầm lẫn.

CẬP NHẬT: Charles Bretana đã cải thiện câu trả lời của mình , vì vậy câu trả lời này bây giờ chỉ là một cách ghi nhớ đơn giản (có khả năng đơn giản hóa).


2
bản sao câu trả lời của Charles Bretana
Dinesh Saini

2
@DineshSaini - Sơ đồ của tôi hơi khác một chút. Để rõ ràng, tôi đặt A lên trên B trong cả hai trường hợp, nhấn mạnh xem điểm bắt đầu và điểm cuối của chúng có được đồng bộ hóa hay không. Sơ đồ của Charles Bretana đặt các quy trình đồng bộ theo trình tự mà không "đồng bộ hóa" bất cứ điều gì. (Tôi sẽ bình luận dưới đây câu trả lời của mình để "cải thiện" nó, nhưng nhận ra nó sẽ được dễ dàng hơn chỉ để hiển thị sơ đồ mới.)
entr0p3te

Sơ đồ tuyệt vời. Tôi nghĩ rằng cách gọi một SYNC hàng đầu, là bắt đầu và kết thúc A trong sơ đồ hàng đầu có hiệu quả đồng thời, theo nghĩa là không có sự kiện nào khác can thiệp, hoặc có thể can thiệp vào việc hoàn thành của A. Đồng bộ hóa có thể đề cập đến một tác vụ riêng lẻ, như thêm vào các thanh ghi CPU, có điểm bắt đầu và kết thúc rất gần, để thực sự đồng bộ hóa từ điển.
Dean Radcliffe

55

Đồng bộ có nghĩa là người gọi chờ phản hồi hoặc hoàn thành, không đồng bộ mà người gọi tiếp tục và phản hồi đến sau (nếu có).

Ví dụ:

    static void Main(string[] args)
    {
        Console.WriteLine("Before call");
        doSomething();
        Console.WriteLine("After call");
    }

    private static void doSomething()
    {
        Console.WriteLine("In call");
    }

Điều này sẽ luôn luôn thông báo:

Before call
In call
After call

Nhưng nếu chúng ta tạo ra một cái gì đó không đồng bộ (nhiều cách để làm điều đó), thì đầu ra có thể trở thành:

Before call
After call
In call

Bởi vì phương thức thực hiện cuộc gọi không đồng bộ sẽ ngay lập tức tiếp tục với dòng mã tiếp theo. Tôi nói "có thể", bởi vì thứ tự thực hiện không thể được đảm bảo với các hoạt động asynch. Nó cũng có thể thực thi như bản gốc, tùy thuộc vào thời gian của luồng, v.v.


34

Tôi nghĩ rằng đây là một lời giải thích tròn trịa nhưng nó vẫn làm rõ bằng cách sử dụng ví dụ thực tế.

Ví dụ nhỏ:

Giả sử phát một âm thanh bao gồm ba bước:

  1. Lấy bài hát nén từ đĩa cứng
  2. Giải nén âm thanh.
  3. Phát âm thanh không nén.

Nếu trình phát âm thanh của bạn thực hiện bước 1,2,3 liên tục cho mỗi bài hát thì đó là đồng bộ. Bạn sẽ phải chờ một thời gian để nghe bài hát cho đến khi bài hát thực sự được tải xuống và giải nén.

Nếu trình phát âm thanh của bạn thực hiện bước 1,2,3 độc lập với nhau, thì nó không đồng bộ. I E. Trong khi phát âm thanh 1 (bước 3), nếu nó tải âm thanh 3 từ ổ cứng song song (bước 1) và nó giải nén âm thanh 2 song song. (bước 2) Bạn sẽ nghe bài hát mà không phải chờ đợi nhiều để tìm nạp và giải nén.


32

Các hoạt động đồng bộ hóa và không đồng bộ là về thực thi để thực hiện một nhiệm vụ mới liên quan đến nhiệm vụ hiện tại. Hai nhiệm vụ trên một bảng: nhiệm vụ hiện tại và một nhiệm vụ mới

Đồng bộ (chặn) - ngụ ý rằng các tác vụ sẽ được thực hiện từng cái một. Một nhiệm vụ tiếp theo chỉ được bắt đầu sau khi nhiệm vụ trước đó kết thúc. Task 2không được bắt đầu cho đến khi Task 1kết thúc

Không đồng bộ (không chặn) - ngụ ý rằng tác vụ trả lại quyền điều khiển ngay lập tức với lời hứa sẽ thực thi mã và thông báo về kết quả sau này (ví dụ: gọi lại, tính năng). Task 2được thực thi ngay cả khi Task 1chưa kết thúc

SO trả lời về đồng bộ hóa và không đồng bộ: trong iOS , trong Android


Sơ đồ trong ví dụ đa luồng đồng bộ xuất hiện để mô tả đồng thời thực hiện các luồng?
samis

@ sαmosΛris bạn có thể xem xét Chủ đề giống như trục X biểu thị dòng thời gian
yoAlex5

Trục x thường được sử dụng làm kích thước không gian; trục t cho thời gian - một sự khác biệt quan trọng được tìm thấy trong phân tích độ phức tạp của thuật toán.
samis

23

Nói một cách đơn giản, thực thi không đồng bộ đang làm công cụ trong nền.

Ví dụ: nếu bạn muốn tải xuống một tệp từ internet, bạn có thể sử dụng chức năng đồng bộ để làm điều đó nhưng nó sẽ chặn luồng của bạn cho đến khi tệp tải xuống xong. Điều này có thể làm cho ứng dụng của bạn không phản hồi với bất kỳ đầu vào của người dùng.

Thay vào đó, bạn có thể tải xuống tệp trong nền bằng phương pháp không đồng bộ. Trong trường hợp này, chức năng tải xuống trả về ngay lập tức và việc thực hiện chương trình tiếp tục bình thường. Tất cả các hoạt động tải xuống được thực hiện trong nền và chương trình của bạn sẽ được thông báo khi kết thúc.


1
ví dụ của bạn sẽ nhanh hơn như thế nào Cuối cùng, bạn không thể phát tệp cho đến khi hoàn tất thời gian tải xuống. Bạn có thể giải thích? Tôi đoán rằng tôi không hiểu async sau đó và có lẽ là tôi nhưng bước hoặc quy trình khác sẽ làm gì trong khi quy trình khác đang chạy (tải xuống)? Ý tôi là bạn có thể làm gì cho đến khi bạn nhận lại quá trình không đồng bộ đó (tải xuống) trong ứng dụng của bạn ... Tôi không hiểu. Vì vậy, những gì, bạn vẫn phải cho người dùng thấy một số loại cơ chế chờ đợi không có vấn đề gì trong cả hai tình huống?
positiveGuy

4
Nó không phải nhanh hơn. Đó là về việc không chặn luồng chính, để nó có thể xử lý loại đầu vào khác của người dùng. Ví dụ: người dùng có thể muốn hủy tải xuống hoặc bắt đầu tải xuống một tệp khác cùng một lúc.
Michał Piaskowski

19

Như một ví dụ thực sự đơn giản,

Đồng bộ hóa

Hãy tưởng tượng 3 học sinh được hướng dẫn để chạy một cuộc đua tiếp sức trên một con đường.

Học sinh thứ nhất chạy quãng đường đã cho của cô ấy, dừng lại và chuyển dùi cui đến lần thứ 2. Không ai khác đã bắt đầu chạy.

1------>
        2.
                3.

Khi học sinh thứ 2 lấy dùi cui, cô bắt đầu chạy quãng đường đã cho.

      1.
        2------>
                3.

Học sinh thứ 2 đã cởi trói cho cô ấy. Bây giờ cô ấy đã dừng lại và buộc lại. Bởi vì điều này, thời gian kết thúc thứ 2 đã được kéo dài và thời gian bắt đầu của thứ 3 đã bị trì hoãn.

      1.
        --2.--->
                3.

Mô hình này tiếp tục cho đến khi người thứ 3 lấy dùi cui từ lần thứ 2 và kết thúc cuộc đua.

HỎI

Chỉ cần tưởng tượng 10 người ngẫu nhiên đi trên cùng một con đường. Tất nhiên họ không phải xếp hàng, chỉ ngẫu nhiên đi bộ trên những nơi khác nhau trên đường ở những chặng đường khác nhau.

Dây giày của người thứ 2 đã được cởi trói. Cô dừng lại để buộc nó lại.

Nhưng không ai chờ đợi cô ấy bị trói. Mọi người khác vẫn đi bộ giống như cách họ đã làm trước đây, với cùng tốc độ của họ.

10-->    9-->
   8--> 7-->   6-->
 5-->     4-->
1-->   2.    3-->

18

Tôi đã tạo một gif để giải thích điều này, hy vọng sẽ hữu ích: nhìn, dòng 3 không đồng bộ và các dòng khác là đồng bộ. tất cả các dòng trước dòng 3 nên đợi cho đến khi dòng hoàn thành công việc của nó, nhưng vì dòng 3 không đồng bộ, dòng tiếp theo (dòng 4), đừng đợi dòng 3, nhưng dòng 5 nên đợi dòng 4 hoàn thành công việc của nó, và dòng 6 nên đợi dòng 5 và 7 cho 6, vì dòng 4,5,6,7 không đồng bộ. dòng 3 không đồng bộ và dòng khác không đồng bộ


12

Khi thực hiện một chuỗi như: a> b> c> d>, nếu chúng ta gặp lỗi ở giữa thực thi như:

a
b
c
fail

Sau đó, chúng tôi bắt đầu lại từ đầu:

a
b
c
d

đây là đồng bộ

Tuy nhiên, nếu chúng ta có cùng một chuỗi để thực hiện: a> b> c> d> và chúng ta gặp lỗi ở giữa:

a
b
c
fail

... nhưng thay vì khởi động lại từ đầu, chúng tôi lại bắt đầu từ điểm thất bại:

c
d

... Điều này được gọi là không đồng bộ.


1
bạn có thể vui lòng chính xác hơn những gì bạn muốn nói bằng cách cung cấp nhiều ngữ cảnh hơn cho các ví dụ của bạn
krichard 15/12/12

5
Câu trả lời này chỉ đơn giản là không chính xác.
Hầu tước Lorne

7

Bạn đang nhầm lẫn Đồng bộ với Parallel vs Series. Đồng bộ có nghĩa là tất cả cùng một lúc. Đồng bộ hóa có nghĩa là liên quan đến nhau có thể có nghĩa là trong chuỗi hoặc tại một khoảng thời gian cố định. Trong khi chương trình đang làm tất cả, nó chạy theo chuỗi. Lấy một cuốn từ điển ... đây là lý do tại sao chúng ta có trà không đường. Bạn có trà hoặc trà ngọt.


3
Trên thực tế, "đồng bộ hóa" chỉ mối quan hệ giữa các hướng dẫn và đồng hồ. KHÔNG phải là mối quan hệ giữa các hướng dẫn. Đó là lý do tại sao nó trông ngược "đồng bộ" thực sự có nghĩa là cái khác: nhưng các hướng dẫn được đồng bộ hóa với đồng hồ. "Không đồng bộ" có nghĩa là "bất cứ lúc nào, tôi không quan tâm khi điều đó xảy ra": các hướng dẫn không cần phải được đồng bộ hóa với đồng hồ. Vâng, có một định nghĩa từ điển, nhưng bạn phải chắc chắn rằng bạn đang xác định đúng tình huống.
Tom Padilla

1
Đồng bộ không có nghĩa là 'tất cả cùng một lúc' trong điện toán. Bạn đang nhầm lẫn đồng bộ hóa với đồng bộ và 'song song so với loạt' với trà và trà ngọt. Trả lời không có ý nghĩa gì.
Hầu tước Lorne

7

Đồng bộ về cơ bản có nghĩa là bạn chỉ có thể thực hiện một việc tại một thời điểm. Không đồng bộ có nghĩa là bạn có thể thực thi nhiều thứ cùng một lúc và bạn không phải hoàn thành việc thực hiện điều hiện tại để chuyển sang điều tiếp theo.


Không có nhiều thứ thực thi cùng một lúc được gọi là Đa luồng thay vì không đồng bộ.
Saletanth Karumanaghat

7

Sử dụng một ví dụ về hướng dẫn làm bữa sáng

  1. Rót một tách cà phê.
  2. Làm nóng chảo, sau đó chiên hai quả trứng.
  3. Chiên ba lát thịt xông khói.
  4. Bánh mì nướng hai miếng bánh mì.
  5. Thêm bơ và mứt vào bánh mì nướng.
  6. Rót một ly nước cam.

Nếu bạn có kinh nghiệm nấu ăn, bạn sẽ thực hiện các hướng dẫn đó không đồng bộ. bạn sẽ bắt đầu làm nóng chảo để lấy trứng, sau đó bắt đầu thịt xông khói. Bạn sẽ đặt bánh mì vào lò nướng bánh, sau đó bắt đầu trứng. Ở mỗi bước của quy trình, bạn sẽ bắt đầu một nhiệm vụ, sau đó chuyển sự chú ý của bạn sang các nhiệm vụ đã sẵn sàng để bạn chú ý.

Nấu bữa sáng là một ví dụ điển hình cho công việc không đồng bộ không song song. Một người (hoặc chủ đề) có thể xử lý tất cả các nhiệm vụ này. Tiếp tục tương tự bữa sáng, một người có thể làm bữa sáng không đồng bộ bằng cách bắt đầu nhiệm vụ tiếp theo trước khi lần đầu tiên hoàn thành. Việc nấu ăn tiến triển cho dù có ai đó đang xem nó hay không. Ngay khi bạn bắt đầu làm nóng chảo cho trứng, bạn có thể bắt đầu chiên thịt xông khói. Khi thịt xông khói bắt đầu, bạn có thể cho bánh mì vào máy nướng bánh mì.

Đối với thuật toán song song, bạn cần nhiều đầu bếp (hoặc chủ đề). Một người sẽ làm trứng, một thịt xông khói, vân vân. Mỗi người sẽ chỉ tập trung vào một nhiệm vụ đó. Mỗi đầu bếp (hoặc luồng) sẽ bị chặn đồng bộ chờ thịt xông khói sẵn sàng để lật hoặc bánh mì nướng bật lên.

Tham khảo từ các khái niệm lập trình không đồng bộ


4

Một hoạt động đồng bộ thực hiện công việc của nó trước khi quay lại với người gọi.

Một hoạt động không đồng bộ thực hiện (hầu hết hoặc tất cả) công việc của nó sau khi quay lại với người gọi.


liên kết đã chết.
Hy vọng có ích vào

1

Liên quan đến định nghĩa " cùng một lúc " về thực thi đồng bộ (đôi khi gây nhầm lẫn), đây là một cách tốt để hiểu về nó:

Thực thi đồng bộ : Tất cả các tác vụ trong một khối mã đều được thực hiện cùng một lúc.

Thực thi không đồng bộ : Tất cả các tác vụ trong một khối mã không phải là tất cả được thực thi cùng một lúc.


Tôi sẽ đồng ý với điều này nhiều hơn nếu bạn nói "hiệu quả cùng một lúc", hoặc "vì mục đích thực tế" .. Tôi nghĩ rằng downvote là cho tuyên bố không chính xác rằng mọi thứ thực sự đang được thực hiện tại cùng một tiem.
Dean Radcliffe

1

Tôi nghĩ rằng một cách tốt để nghĩ về nó là một cuộc đua Relay chạy cổ điển

Đồng bộ : Các quy trình như các thành viên của cùng một đội, họ sẽ không thực thi cho đến khi nhận được dùi cui (kết thúc quá trình thực hiện quy trình / người chạy trước đó) và tất cả họ đều hành động đồng bộ với nhau.

Không đồng bộ : Khi các quá trình như thành viên của các đội khác nhau trên cùng một đường đua tiếp sức, họ sẽ chạy và dừng, không đồng bộ với nhau, nhưng trong cùng một cuộc đua (thực hiện chương trình tổng thể).

Liệu nó có ý nghĩa?


1

Một định nghĩa tiếng Anh khác về Đồng bộ hóa là ở đây

Danh từ: Tọa độ; phối hợp.

Tôi nghĩ đó là một định nghĩa tốt hơn so với "Xảy ra cùng một lúc". Đó cũng là một định nghĩa, nhưng tôi không nghĩ nó là một định nghĩa phù hợp với cách nó được sử dụng trong Khoa học Máy tính.

Vì vậy, một nhiệm vụ không đồng bộ không được phối hợp với các nhiệm vụ khác, trong khi đó, một nhiệm vụ đồng bộ được phối hợp với các nhiệm vụ khác, do đó, một nhiệm vụ sẽ kết thúc trước khi bắt đầu một nhiệm vụ khác.

Làm thế nào đạt được là một câu hỏi khác nhau.


0

Đồng bộ có nghĩa là cách hàng đợi thực hiện từng tác vụ sẽ được thực thi. Giả sử chỉ có phương tiện cần được chia sẻ giữa bạn bè để đến đích của họ từng người một sẽ được chia sẻ.
Trong trường hợp không đồng bộ, mỗi người bạn có thể được thuê xe và đến đích.


0

Có nghĩa là đồng bộ có nghĩa là cùng một lúc, theo nghĩa đen, nó có nghĩa là làm tất cả cùng nhau. nhiều người / vật thể trên thế giới có thể làm nhiều việc cùng một lúc nhưng nếu chúng ta nhìn vào máy tính, nó nói có nghĩa là đồng bộ trong đó các quy trình làm việc cùng nhau có nghĩa là các quy trình phụ thuộc vào sự trở lại của nhau và đó là lý do tại sao chúng được thực thi sau khi khác theo trình tự thích hợp. Trong khi phương tiện không đồng bộ có nghĩa là các quy trình không hoạt động cùng nhau, chúng có thể hoạt động cùng một lúc (nếu ở chế độ đa luồng), nhưng hoạt động độc lập.

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.