Hai khái niệm tôi sẽ đề cập bên dưới có vẻ quen thuộc với nhiều nhà phát triển. Tôi tự viết mã java, vì vậy tôi rất quen thuộc với đa luồng (song song). Nhưng sau đó, một số ngôn ngữ khác nổi lên như một hiện tượng, chẳng hạn như go. Nó xử lý đa nhiệm theo một cách khác (đồng thời) mà tôi nghĩ là đáng học hỏi, và nó giúp tôi có nhiều lựa chọn hơn khi giải quyết các vấn đề có yêu cầu hiệu suất cao trong đa nhiệm. Trong bài tiếp theo, tôi sẽ giới thiệu sự khác biệt giữa hai khái niệm đồng quy và song song.
1. Đồng thời là gì?
Xử lý đồng thời có nghĩa là có thể xử lý nhiều công việc cùng một lúc mà không cần các công việc xảy ra cùng một lúc. Có thể giải thích rõ điều này bằng ví dụ sau:
Một cậu bé chạy bộ vào buổi sáng. Trong quá trình chạy, anh phát hiện mình quên buộc dây giày, lúc này anh phải dừng chạy và buộc lại để tiếp tục chạy.
Đây là một ví dụ cơ bản về đồng thời. Anh chàng ở trên có thể xử lý cả chạy và buộc, nghĩa là anh ta có thể xử lý nhiều nhiệm vụ cùng một lúc)
2. Song song là gì và nó khác với đồng thời như thế nào?
Song song có nghĩa là có thể xử lý nhiều công việc cùng một lúc. Nghe có vẻ hơi giống đồng thời, nhưng không phải vậy. Quay lại ví dụ trước đó về những người bạn chạy bộ. Giả sử anh ấy vừa nghe nhạc vừa chạy bộ. Trong trường hợp này, anh ta có thể làm 2 công việc chạy và nghe nhạc cùng một lúc. Tức là hai hành động xảy ra song song.
3. Tính đồng thời và tính song song từ góc độ kỹ thuật
Bây giờ bạn đã thấy cách song song và đồng thời hoạt động với các ví dụ trong thế giới thực, chúng tôi sẽ cho bạn thấy từ góc độ kỹ thuật.
Giả sử bạn đang phát triển một trình duyệt web. Một trình duyệt web có nhiều thành phần khác nhau. Hai trong số đó là hiển thị nội dung web và tải xuống các tệp từ internet. Giả sử chúng ta tổ chức mã cho mỗi chức năng để thực thi độc lập. Nếu bạn đang chạy trình duyệt này trên bộ xử lý lõi đơn. Bộ xử lý có thể chuyển đổi ngữ cảnh giữa hai công việc là tải xuống tệp và hiển thị nội dung web. Trong trường hợp này, có thể hiểu rằng bộ xử lý đang xử lý đồng thời. Về cơ bản, các quy trình đồng thời bắt đầu vào các thời điểm khác nhau và các chu trình thực thi của chúng đan xen nhau. Nhưng vì quá trình chuyển đổi diễn ra quá nhanh, chúng tôi hầu như không nhận thấy độ trễ ở đây, và có cảm giác như 2 công việc đang diễn ra cùng một lúc.
Tiếp theo, giả sử trình duyệt đang chạy trên bộ xử lý đa lõi. Trong trường hợp này, 2 công việc tải tệp và kết xuất nội dung web có thể được thực hiện trên 2 lõi khác nhau. Ở đây chúng tôi gọi đây là quá trình xử lý song song.
Quá trình xử lý song song không phải lúc nào cũng dẫn đến việc thực thi nhanh hơn. Điều này là do các thành phần chạy song song có thể phải giao tiếp với nhau. Ví dụ, trong trình duyệt trên, sau khi tải xong tập tin, nó sẽ hiển thị một thông báo hoàn chỉnh cho người dùng. Giao tiếp này xảy ra giữa hai thành phần xử lý tải xuống và thành phần hiển thị thông báo hiển thị trên màn hình web. Chi phí của tài nguyên này thấp hơn so với các hệ thống đồng thời. Và nếu các thành phần này chạy song song nhiều lõi, giao tiếp này sẽ tiêu tốn nhiều tài nguyên hơn.