Tải bản đầy đủ (.pdf) (185 trang)

Bài giảng Lập trình phân tán - Đại học Thuỷ lợi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (46.78 MB, 185 trang )

TRƯỜNG ĐẠI HỌC THỦY LỢl
KHOA CÔNG NGHỆ THÔNG TIN
TS. LÊ NGUYỄN TUẤN THÀNH-TS. LÝ ANH TUẤN

BÀI GIẢNG

LẬP TRÌNH PHÂN TÁN

NHÀ XUẤT BẢN BÁCH KHOA HÀ NỘI


TRƯỜNG ĐẠI HỌC THỦY LỢI

KHOA CÔNG NGHỆ THÔNG TIN
TS. LÊ NGUYỄN TUẤN THÀNH - TS. LÝ ANH TUẤN

BÀI GIẢNG

LẬP TRÌNH PHÂN TÁN

NHÀ XUẤT BẢN BÁCH KHOA HÀ NỘI


Biên mục trên xuất bản phẩm của Thư viện Quốc gia Việt Nam

Lê Nguyễn Tuấn Thành

Bài giảng Lập trình phân tán / Lê Nguyễn Tuấn Thành, Lý Anh Tuấn. - H. : Bách
khoa Hà Nội, 2022. - 184 tr. : hình vẽ, bảng ; 27 cm

ĐTTS ghi: Trường Đại học Thuỷ lợi. Khoa Cơng nghệ thơng tin



1. Lập trình phân tán 2. Bài giảng

005.2760711 - dc23

BKH0129p-CIP

2


LỜI NÓI ĐÀU
Sự phổ biến của các bộ xử lý đa nhân đã mang lại ảnh hường lan tôa, thay đổi cách
chúng ta tư duy và phát triển các hệ thống phần mềm.

Trước đây, những tiến bộ trong công nghệ thường mang ý nghĩa ám chỉ những tiến bộ
về phần cứng, về tốc độ xung nhịp của đồng hồ. Từ đó, phần mềm tự nhiên sẽ “tăng tốc”

hiệu quả theo thời gian. Tuy nhiên, quan điểm này đã dần thay đối. Giờ đây, những tiến bộ
trong công nghệ sẽ mang ý nghĩa về việc tăng tính song song của chương trình, mà khơng
cịn đơn thuần là tăng tốc độ xung nhịp đồng hồ nữa. Khai thác tính song song là một trong
những thách thức nổi bật của ngành Khoa học Máy tính hiện đại.

Các ứng dụng đa luồng đem lại rất nhiều lợi ích, giúp tận dụng được các bộ xử lý đa

nhân nhằm tăng tốc độ tính tốn của chương trình. Một số ứng dụng cịn tận dụng thêm bộ

xử lý đồ họa (GPU) để tính tốn hiệu năng cao dựa vào số lượng nhân lớn của GPU. Phát
triến các hệ thống có tính song song và phân tán yêu cầu chúng ta sử dụng các công cụ và
kỹ thuật khác với việc phát triển các phần mềm tuần tự truyền thống.


Bài gỉảng Lập trình Phân tán hướng tới trang bị cho sinh viên các kiến thức nền tảng,
các bài tốn và kỹ năng lập trình đồng thời và phân tán. Bài giảng được sử dụng làm tài liệu

giảng dạy chính thức cho mơn “Lập trình Phân tán”, trong các ngành học thuộc Khoa Công
nghệ Thông tin, Trường Đại học Thủy lợi. Bài giảng được biên soạn phần lớn dựa trên cuốn
sách “Concurrent and Distributed Computing in Java” của tác giả Vijay K. Garg [1], xuất

bản năm 2004, kết hợp với kiến thức trong quá trình giảng dạy nhiều năm.
Nội dung của bài giảng được bố cục như sau:

Chương 1. Cung cấp các kiến thức tổng quan, các thuật ngữ liên quan đến hệ thống

đồng thời và phân tán. Dựa trên những đặc điểm của hệ thống đồng thời và phân tán, chương 1
đưa ra những khó khăn nền tảng khi thiết kế các thuật toán cho những hệ thống đó. Cuối
cùng, chúng ta sẽ tìm hiểu những cấu trúc cơ bản để làm việc với Luồng trong các ngơn ngữ
lập trình.

Chương 2. Thảo luận về bài tốn loại trừ lẫn nhau trong các ứng dụng đồng thời, sử

dụng cơ chế chia sẻ bộ nhớ. Tiếp theo, một số giải pháp phần mềm, tức là, những thuật toán
sử dụng vịng lặp, cho bài tốn loại trừ lẫn nhau sẽ được trình bày và phân tích. Chương này

cung cấp sự thúc đẩy cho nhiều thành phần đồng bộ hóa được thảo luận ờ chương 3.

3


Chương 3. Giới thiệu hai trong số nhiều cấu trúc đồng bộ hóa, Semaphore và Monitor,
giúp giải quyết vấn đề bận chờ của các giải pháp cho bài toán loại trừ lẫn nhau được đề cập


ở chương 2. Các cấu trúc này cũng được sử dụng để giải quyết một số bài toán đồng
bộ khác.

Chương 4. Thảo luận về một số kỹ thuật lập trình phân tán, để phát triển các ứng dụng
phân tán, như Socket, RMI, RPC và MOM. Chương này là điều kiện tiên quyết để hiểu các

bài toán được miêu tả ở các chương sau.
Chương 5. Giới thiệu một trong các bài toán nền tảng trong các hệ thống phân tán: bài

toán xác định thứ tự của các sự kiện hoặc các trạng thái đã xảy ra trong một tính tốn phân
tán. Các cơ chế đồng hồ, được phát triển dựa trên mơ hình đã - xảy - ra - trước, được sử
dụng để gắn dấu thời gian cho các sự kiện hoặc trạng thái trong một tính tốn phân tán.
Chương 6. Thảo luận một trong những bài toán được quan tâm nhất trong các hệ thống
phân tán: bài toán truy cập tài nguyên chia sẻ hay bài tốn loại trừ lẫn nhau giữa các tiến
trình. Chương này cung cấp giao diện Lock và thảo luận một số thuật tốn để triển khai giao

diện này.
Chương 7. Trình bày về bài tốn sắp thứ tự thơng điệp trong các hệ thống phân tán.
Trong chương này, chúng ta sẽ thảo luận thứ tự FIFO, thứ tự nhân quả, thứ tự đồng bộ cho

các thông điệp đơn hướng và thứ tự tồn bộ cho các thơng điệp đa hướng. Các thuật toán
tương ứng để đảm bảo các thứ tự này cũng được đề xuất và phân tích.
Chương 8. Thảo luận về bài toán đồng thuận trong các hệ thống phân tán. Neu như các
chương trước giả định rằng khơng có lỗi trong hệ thống phân tán, chương này phân tích tính
khả thi (hoặc tính bất khả thi) trong việc giải quyết những bài toán với sự xuất hiện của nhiều
kiểu lỗi khác nhau. Chương này đề cập đến kết quả bất khả thi căn bản của Fischer, Lynch,
và Paterson. Chương cũng chỉ ra rằng bài tốn đồng thuận có thể được giải quyết trong một
môi trường đồng bộ với những lỗi Byzantine và lỗi sụp đổ. Nó cũng thảo luận khả năng giải
quyết các bài toán trong trường hợp thiếu giao tiếp tin cậy.
Trong quá trình biên soạn cuốn sách, mặc dù đã rất cố gắng nhưng không thể tránh

được những thiếu sót, các tác giả rất mong nhận được những ý kiến đống góp của bạn đọc

để cuốn sách được hoàn thiện hơn.
Xin trân trọng cảm ơn!

Các tác giả

4


MỤC LỤC
LỜI NĨI ĐẦU............................................................................................................................... 3
Danh mục hình vẽ........................................................................................................................ 9
Danh mục bảng biếu.................................................................................................................. 11

Danh mục định nghĩa................................................................................................................. 12
Danh mục chương trình............................................................................................................ 13
Bảng chú giải thuật ngữ........................................................................................................... 15

Chương 1. NHỮNG KIÉN THỨC NÈN TẢNG..................................................................17
1.1. Giới thiệu về tính tốn đồng thịi và phân tán....................................................... 18
1.2. Đặc điểm của hệ thống đồng thòi và phân tán...................................................... 20
1.3. Sự tăng tốc trong ứng dụng đồng thịi....................................................................... 22

1.4. Các thách thức của chương trình đồng thời và phân tán..................................... 24
1.5. So sánh hệ thống đồng thòi và hệ thống phân tán.................................................. 24
1.6. Các mục tiêu thiết kế..................................................................................................... 26
1.7. Các thuật ngũ’.................................................................................................................. 27

1.7.1. Chương trình, tiến trình và luồng........................................................................... 27


1.7.2. Sự đan xen................................................................................................................. 29
1.7.3. Trạng thái đua tranh................................................................................................. 30
1.7.4. Đồng bộ và bất đồng bộ.......................................................................................... 32
1.7.5. Bị chặn và không bị chận........................................................................................ 32

1.7.6. Sự bế tắc, sự chết đói và khóa sống....................................................................... 32
1.8. Lập trình đa luồng......................................................................................................... 34

1.8.1. Lập trình đa luồng trong Java............................................................................... 34
1.8.2. Lập trình đa luồng trong các ngơn ngữ khác....................................................... 43

Bài tập..................................................................................................................................... 45

5


Chương 2. BÀI TOÁN LOẠI TRỪ LẪN NHAU.................................................................48
2.1. Giới thiệu..........................................................................................................................48
2.2. Giải pháp cho bài toán mutex trong trường họp hai luồng................................. 52

2.2.1. Giải pháp 1................................................................................................................ 52
2.2.2. Giải pháp 2................................................................................................................ 53
2.2.3. Giải pháp 3................................................................................................................ 55

2.2.4. Thuật toán của Peterson.......................................................................................... 56
2.3. Giải pháp cho bài toán mutex trong trường họp n luồng......................................59

Bài tập.......................................................................................................................................62


Chương 3. NHỮNG CẤU TRÚC ĐỒNG BỘ HÓA........................................................... 65
3.1. Semaphore........................................................................................................................65

3.1.1. Khái niệm semaphore............................................................................................. 65
3.1.2. Semaphore trong Java..............................................................................................67
3.1.3. Giải quyết một số bài toán đồng bộ với semaphore............................................. 70
3.2. Monitor............................................................................................................................. 80

3.2.1. Khái niệm monitor................................................................................................... 80
3.2.2. Giải quyết một số bài toán đồng bộ với monitor trong Java.............................. 83
Bài tập.......................................................................................................................................87

Chương 4. MỘT SỐ KỸ THUẬT ĐẾ XÂY DƯNG HỆ THỐNG PHÂN TÁN.......... 90
4.1. Lóp InetAddress............................................................................................................. 90
4.2. Socket................................................................................................................................ 91

4.2.1. Socket với ƯDP....................................................................................................... 91
4.2.2. Socket với TCP........................................................................................................ 96
4.3. RMI................................................................................................................................. 102

4.3.1. Cài đặt của RMI..................................................................................................... 103
4.3.2. Khai báo đối tượng ở xa....................................................................................... 104
4.3.3. Cài đặt tiến trình khách..........................................................................................107

6


4.4. MOM............................................................................................................................ 109

4.4.1. Hai mơ hình của hệ thống messaging.................................................................. Ill

4.4.2. JMS.......................................................................................................................... Ill
Bài tập.................................................................................................................................... 115

Chương 5. MƠ HÌNH VÀ cơ CHÉ ĐÒNG HÒ.............................................................. 116
5.1. Đặc điểm của hệ thống phân tán được nghiên cứu.............................................. 117
5.2. Mơ hình đã - xảy - ra - trước của một tính tốn phân tán................................ 119
5.3. Những cơ chế đồng hồ...............................................................................................120

5.3.1. Đồng hồ logic..........................................................................................................120
5.3.2. Đồng hồ vector....................................................................................................... 123
5.3.3. Đồng hồ phụ - thuộc - trực - tiếp....................................................................... 126
5.3.4. Đồng hồ ma trận..................................................................................................... 128
Bài tập.................................................................................................................................... 131

Chương 6. BÀI TOÁN TRUY CẬP TÀI NGUYÊN CHIA SẺ....................................... 132
6.1. Đặc tả bài toán loại trừ lẫn nhau trong hệ thống phân tán................................ 132
6.2. Các thuật toán dựa trên timestamp......................................................................... 136

6.2.1. Thuật toán của Lamport........................................................................................ 136
6.2.2. Thuật toán của Ricart và Agrawala...................................................................... 139
6.3. Các thuật toán dựa trên token.................................................................................. 142

6.3.1. Thuật tốn tập trung............................................................................................... 142
6.3.2. Thuật tốn vịng trịn token................................................................................... 144
6.4. Các thuật toán dựa trên số đại biểu......................................................................... 146

Bài tập.................................................................................................................................... 148

Chương 7. BÀI TOÁN SẮP THỦ TỤ THỒNG ĐIỆP..................................................... 150
7.1. Thứ tự FIFO................................................................................................................. 150

7.2. Thứ tự nhân quả........................................................................................................... 152
7.3. Thứ tự đồng bộ............................................................................................................. 154

7


7.4. Thứ tự tồn bộ cho thơng điệp đa hướng.............................................................. 159

7.4.1. Thuật toán tập trung............................................................................................... 159
7.4.2. Thuật toán của Lamport cho thứ tự tồn bộ........................................................ 160

7.4.3. Thuật tốn của Skeen............................................................................................. 160
Bài tập.....................................................................................................................................162

Chương 8. BÀI TỐN ĐỊNG THUẬN..............................................................................164
8.1. Giói thiệu bài toán....................................................................................................... 164
8.2. Sự đồng thuận trong những hệ thống bất đồng bộ.............................................. 165
8.3. ứng dụng 1: chấm dứt quảng bá tin cậy.................................................................169
8.4. Sự đồng thuận trong những hệ thống đồng bộ...................................................... 170

8.4.1. Sự đồng thuận với những lỗi sụp đổ................................................................... 170
8.4.2. Sự đồng thuận với những lỗi Byzantine.............................................................174
8.5. Độ hiểu biết và độ hiểu biết chung........................................................................... 178
8.6. ứng dụng 2: bài toán hai tướng quân..................................................................... 180

Bài tập.................................................................................................................................... 181
TÀI LIỆU THAM KHẢO...................................................................................................... 183

8



DANH MỤC HÌNH VẼ
Hình 1.1. Minh họa một hệ thống song song................................................................... 18
Hình 1.2. Minh họa một hệ thống phân tán..................................................................... 19
Hình 1.3. Minh họa tính độc lập của các tiến trình.........................................................28

Hình 1.4. Minh họa một tiến trình với năm luồng.......................................................... 28
Hình 1.5. Minh họa sự đan xen giữa các luồng...............................................................29
Hình 1.6. Minh họa chưong trình đồng thời dẫn đến trạng thái đua tranh.................. 30
Hình 1.7. Các kịch bản chạy của chng trình được minh họa ở hình 1.6.................. 31
Hình 1.8. Minh họa trạng thái bế tắc................................................................................ 33
Hình 1.9. Các trạng thái trong vịng đời của luồng......................................................... 39
Hình 2.1. Cấu trúc chưong trình đồng thời cho bài tốn mutex....................................50
Hình 3.1. Minh họa cấu trúc semaphore.......................................................................... 66
Hình 3.2. Quá trình chuyến trạng thái của semaphore nhị phân................................... 68
Hình 3.3. Quá trình chuyến trạng thái của semaphore đếm........................................... 69

Hình 3.4. Bộ đệm chia sẻ được cài đặt sử dụng một mảng quay vịng........................ 70
Hình 3.5. Giải pháp cho bài tốn người đọc - người ghi............................................... 75

Hình 3.6. Minh họa bài tốn bữa tối của triết gia với năm triết gia.............................. 77
Hình 3.7. Minh họa cấu trúc monitor............................................................................... 81
Hình 3.8. Minh họa cài đặt cấu trúc monitor trong Java................................................ 83

Hình 4.1. Kiến trúc của RMI...........................................................................................103
Hình 4.2. Các bước trong co chế vận hànhcủaRMI.................................................... 104

Hình 4.3. Minh họa hệ thống phân tán dựa trênMOM................................................ 110
Hình 4.4. Kiến trúc của JMS........................................................................................... 112
Hình 4.5. Mơ hình P2P trong JMS..................................................................................113


Hình 4.6. Mơ hình Pub/Sub trong JMS.......................................................................... 114

9


Hình 5.1. Ví dụ hình thể học của một hệ thống phân tán............................................. 118
Hình 5.2. Sơ đồ chuyển trạng thái của một chương trình phân tán đơn giản
với hai tiến trình (P1 - bên trái và P2 - bên phải).........................................118

Hình 5.3. Ví dụ một thực thi trong mơ hình đã - xảy - ra - trước............................ 119
Hình 5.4. Ví dụ thực thi của thuật tốn đồng ho logic..................................................122
Hình 5.5. Ví dụ thực thi của thuật tốn đồng ho vector............................................... 125

Hình 5.6. Ví dụ thực thi của thuật tốn đồng hồ phụ - thuộc - trực - tiếp............... 127
Hình 5.7. Ví dụ thực thi của thuật toán đồng hồ ma trận............................................. 130
Hình 7.1. Một tính tốn thỏa mãn thứ tự FIFO............................................................. 151
Hình 7.2. Một tính tốn theo thứ tự đồng bộ................................................................. 154
Hình 7.3. Một tính tốn khơng theo thứ tự đồng bộ..................................................... 155

Hình 7.4. Minh họa thuật tốn Skeen............................................................................. 161
Hình 8.1. (a) Tính giao hốn của các sự kiện rời rạc; (b) Tính bất đồng bộ

của các thơng điệp........................................................................................... 165

Hình 8.2. (a) Trường hợp 1: proc(e) ± proc(f); (b) Trường hợp 2:

proc(e) = proc(f)......................................................................................... 168

10



DANH MỤC BẢNG BIỂU
Bảng 1.1. Một số phương thức tĩnh trong lớp Executors............................................. 42
Bảng 4.1. Một số phương thức của lóp InetAddress................................................... 91
Bảng 4.2. Một số phương thức của lóp Socket cho tiếntrình khách........................... 96
Bảng 4.3. Một số phương thức của lớp ServerSocket cho tiến trình chủ................. 97
Bảng 4.4. Một số phương thức của lóp Naming......................................................... 108

Bảng 8.1. Thuật tốn cho sự đồng thuận dưới những thất bại kiểu sụp đổ.............. 171

11


DANH MỤC ĐỊNH NGHĨA
Định nghĩa 1.1: Trạng thái của chương trình đồng thời............................................... 31
Định nghĩa 1.2: Sự chuyến đổi trạng thái của chương trìnhđồng thời........................31
Định nghĩa 1.3: Sơ đồ trạng thái của chương trình đồng thời......................................31
Định nghĩa 5.1: Mối quan hệ đã - xảy - ra - trước..................................................... 119

Định nghĩa 5.2: Đồng ho logic...................................................................................... 121
Định nghĩa 5.3: Đồng ho vector.................................................................................... 123
Định nghĩa 7.1: Thứ tự FIFO.......................................................................................... 151
Định nghĩa 7.2: Thứ tự nhân quả................................................................................... 153
Định nghĩa 7.3: Thứ tự toàn bộ cho thông điệp đa hướng......................................... 159

12


DANH MỤC CHƯƠNG TRÌNH

Chương trình 1.1: Tạo luồng bằng cách mở rộng lóp Thread trong Java.................. 34
Chương trình 1.2: Tạo luồng bằng cách cài đặt giao diện Runnable......................... 35
Chương trình 1.3: Minh họa cấu trúc Join trong Java.................................................. 37
Chương trình 1.4: Minh họa chương trình đa luồng trong c.......................... 44
Chương trình 2.1: Chương trình đế kiểm tra các thuật tốn cho bài toán loại trừ

lẫn nhau trong hệ thống đồng thời................................................... 50
Chương trình 3.1: Cài đặt bài tốn sản xuất và tiêu thụ sử dụng semaphore............ 73
Chương trình 3.2: Cài đặt bài toán bữa tối của triết gia sử dụng semaphore............ 79
Chương trình 4.1: Cài đặt của tiến trình chủ sử dụng socket trên UDP..................... 93
Chương trình 4.2: Cài đặt của tiến trình khách sử dụng socket trên UDP.................94
Chương trình 4.3: Cài đặt của lớp NameServer cho máy chủ dịch vụ tên................. 99
Chương trình 4.4: Cài đặt tiến trình khách cho ứng dụng "Dịch vụ tên"................. 100
Chương trình 4.5: Cài đặt của giao diện NameService.............................................. 105
Chương trình 4.6: Một cài đặt của chương trình khách sử dụng RMI.......................108
Chương trình 5.1: Cài

đặt của thuật tốn đồng ho logic.......................................... 121

Chương trình 5.2: Cài

đặt của thuật tốn đồng ho vector......................................... 124

Chương trình 5.3: Càiđặt của thuật toán đồng hồ phụ - thuộc - trực - tiếp............. 126
Chương trình 5.4: Cài đặt của thuật tốn đồng hồ ma trận........................................ 128
Chương trình 6.1: Chương trình kiểm tra một cài đặt của giao diện Lock............... 133
Chương trình 6.2: Lóp ListenerThread.......................................................................... 135

13



Chương trình 6.3: Thuật tốn của Lamport cho bài tốn loại trừ lẫn nhau trong

hệ thống phân tán.............................................................................137
Chương trình 6.4: Thuật toán của Ricart và Agrawala cho bài toán loại trừ lẫn nhau

trong hệ thống phân tán.................................................................. 140
Chương trình 6.5: Thuật toán tập trung cho bài toán loại trừ lẫn nhau trong

hệ thống phân tán.............................................................................143
Chương trình 6.6: Thuật tốn vịng trịn token cho bài tốn loại trừ lẫn nhau trong

hệ thống phân tán.............................................................................145
Chương trình 8.1: Cài đặt thuật tốn đồng thuận trong một mơi trường đồng bộ.... 172
Chương trình 8.2: Chương trình để kiểm tra lớp Consensus...................................... 174
Chương trình 8.3: Cài đặt thuật toán cho bài toán BGA............................................ 175

14


BẢNG CHÚ GIÃI THUẬT NGỮ
Từ viết tắt

Thuật ngữ tiếng Anh

Nghĩa tiếng Việt

Thread

Luong


Process

Tien trình

Multithreading

Đa luồng

Multicore

Đa nhân hoặc đa lõi

Multitasking

Đa nhiệm

Concurrency

Tính đồng thời

Parallelism

Tính song song

Interleaving

Sự đan xen các câu lệnh

Mutual Exclusion


Sự loại trừ lẫn nhau

Atomic Statements

Các câu lệnh nguyên tử

Critical Section

Khu vực quan trọng

Race Condition

Trạng thái đua tranh

Deadlock

Khóa chết

UDP

Universal Datagram Protocol

Giao thức gam dữ liệu phổ quát

TCP

Transmission Control Protocol

Giao thức điều khiến truyền vận


RMI

Remote Method Invocation

Triệu gọi phương thức từ xa

RPC

Remote Procedure Call

Lời gọi thủ tục từ xa

ORB

Object Request Broker

Người môi giới yêu cầu đối tượng

MUTEX

cs

15


MOM

Message Oriented Middleware


Phần mềm trung gian hướng thông

điệp
JMS

Java Message Service

Dịch vụ thông điệp của Java

P2P

Point to Point

Điểm tới điểm

Pub/Sub

Publish-and-Subscribe

Xuất bản và Đăng ký

SPI

Service Provider Interface

Giao diện nhà cung cấp dịch vụ

FIFO

First In First Out


Vào trước, ra trước

FLP

Fischer, Lynch & Paterson

Vào trước, ra trước

TRB

Terminating Reliable Broadcast

Ket thúc quảng bá tin cậy

BGA

Byzantine General Agreement

Bài toán đồng thuận tướng quân
Byzatine

16


Chương 1

NHỮNG KIẾN THỨC NÈN TẢNG

Từ trước đến nay, các chương trình máy tính mà chúng ta phát triển hầu hết đều có

một đặc điểm chung: tại một thời điểm chỉ thực hiện được một tính tốn và chỉ có một luồng

điêu khiên chính. Các chương trình như vậy được gọi là chương trình tuần tự. Tơc độ thực
hiện của các chương trình này phụ thuộc gần như hồn tồn vào tốc độ của bộ xử lý. Mặc

dù tốc độ xử lý của các bộ xử lý đã tăng lên nhiều trong những năm qua, nhưng do những
giới hạn về mặt vật lý, tốc độ tính tốn của chúng khơng thể tăng mãi được. Điều này dẫn
tới một thực tế là nếu chúng ta muốn tăng tốc độ tính tốn của các hệ thống máy tính thì mục

đích cuối cùng là phải khai thác được khả năng xử lý song song của chúng. Ngày càng xuất
hiện nhiều bài toán mà những hệ thống đơn bộ xử lý không đáp ứng được yêu cầu xử lý về
thời gian. Ví dụ, nhiều lĩnh vực mới như đồ họa máy tính, trí tuệ nhân tạo, phân tích số, v.v.

địi hỏi phải xử lý một khối lượng dữ liệu rất lớn, hoặc những bài tốn về xử lý ngơn ngữ tự
nhiên, nhận dạng, xử lý ảnh ba chiều, dự báo thời tiết, v.v. đều đòi hòi phải xử lý dữ liệu với

tốc độ rất cao.
Ngoài ra, chúng ta đã quen thuộc với khái niệm đa nhiệm (multitasking), nghĩa là khả

năng của hệ điều hành cho phép có nhiều chương trình “dường như đang thực thi trong cùng

một thời điểm”, ví dụ, chúng ta có thể thực hiện in tài liệu trong khi đang soạn thảo email.
Ngày nay, các máy tính hiện đại thường có nhiều hơn một bộ xử lý, tuy nhiên, số lượng
chương trình “thực thi đồng thời” khơng bị giới hạn bởi số lượng bộ xử lý. Hệ điều hành gán

cho mỗi chương trình các lát thời gian (time slices) đế thực thi với bộ xử lý, nhằm tạo cho

người dùng ấn tượng về việc thực hiện các công việc một cách đồng thời.
Những chương trình đa luồng (multithread) mờ rộng ý tường đa nhiệm ở mức độ thấp
hơn: các chương trình riêng biệt, tự bản thân chúng sẽ thực hiện nhiều tác vụ trong cùng một

thời điếm. Mỗi tác vụ thường được gọi là một luồng (thread), đây là tên gọi tắt của khái niệm
luồng điều khiển (thread of control). Khi đó, các chương trình có thể chạy nhiều hơn một

luồng tại một thời điểm được gọi là chương trình đa luồng.
Trong chương này, chúng ta sẽ tìm hiểu các kiến thức nền tảng liên quan đến tính tốn

đồng thời và phân tán.

17


1.1. GIỚI THIỆU VÈ TÍNH TỐN ĐỒNG THỜI VÀ PHÂN TÁN

Trong thời gian gần đây, các nhà sản xuất đã từ bỏ việc cố gắng làm cho bộ xử lý chạy
nhanh hơn. Mặc dù, định luật của Moore, tức là, hằng năm, số lượng bóng bán dẫn trong
mạch tích hợp có thể được đặt trong cùng một khơng gian sẽ tăng lên, vẫn còn đúng. Tuy
nhiên, tốc độ đồng hồ tăng lên cũng đồng nghĩa với việc bộ xử lý nóng lên. Do vậy, thay vào
đó, các nhà sản xuất đã và đang chuyển sang các kiến trúc đa lõi. Chip đa bộ xử lý giúp tính
tốn hiệu quả hơn bằng cách khai thác tính song song: huy động nhiều bộ xử lý để làm việc
trên cùng một tác vụ.
Sự phổ biến của các nền tảng đa bộ xử lý đã mang lại một ảnh hưởng lan tỏa. Các hệ
thống tính tốn đồng thời và phân tán hiện đã trở nên rộng rãi. Một hệ thong đồng thời bao
gồm nhiều bộ xử lý (hoặc lõi) giao tiếp trực tiếp với nhau thông qua bộ nhớ được chia sẻ.
Điều hiển nhiên là, nếu khai thác tối đa tính song song trong các ứng dụng, các hệ thống như
vậy sẽ đánh bại các hệ thống tuần tự về mặt hiệu suất. Hình 1.1 minh họa một hệ thống đồng
thời với nhiều bộ xử lý. Các bộ xử lý này giao tiếp với nhau sừ dụng bộ nhớ chia sẻ hay bộ
nhớ dùng chung. Ngồi ra, mỗi bộ xử lý có thể có bộ nhớ cục bộ, không chia sẻ với những
bộ xử lý khác.

Bộ nhớ chia sẻ


Bộ xử


Bộ xử


Bộ xử


Bộ xử


Bộ nhớ
cục bộ

Bộ nhớ
cục bộ

Bộ nhớ
cục bộ

Bộ nhớ
cục bộ

Hình 1.1. Minh họa một hệ thống song song.

Sự song song (parallelism) và sự đồng thời (concurrency) là hai khái niệm liên quan,

nhưng có những sự khác biệt nhỏ. Tính đồng thời có nghĩa là hai hoặc nhiều tác vụ đang đan

xen nhau thực hiện mặc dù chúng có thể khơng cùng thực thi trong một thời điểm. Điều này
có thể đạt được với cơ chế lát thời gian trong các hệ thống đa nhiệm, trong đó các phần việc
của một tác vụ được thực thi tuần tự và đan xen với những phần việc của các tác vụ khác.
Ngược lại, tính song song chỉ xuất hiện khi sự thực thi thực sự xảy ra trong một thời điểm.
Ngoài ra, chúng ta định nghĩa các hệ thống phân tán là những hệ thống máy tính bao
gồm nhiều bộ xử lý được kết nối bằng một mạng truyền thông. Trong những hệ thống này,
các bộ xử lý giao tiếp với nhau bằng cách sử dụng các thông điệp được truyền đi trên mạng
truyền thông. Những hệ thống như vậy, như được minh họa ở hình 1.2, hiện nay đã trở nên

18


phố biến do chi phí cùa các bộ xử lý ngày càng giảm và băng thông kết nối giữa chúng ngày
càng cao. Mạng truyền thơng trong hình 1.2 có thể là một mạng cục bộ, ví dụ Ethernet, hoặc

một mạng diện rộng, ví dụ Internet. Các hệ thống phân tán thường được mơ hình hóa sử
dụng lý thuyết đồ thị, trong đó mỗi bộ xử lý được biếu thị bằng một nút và những nút này
được kết nối bằng các cung, thế hiện các kênh truyền thơng.

Hình 1.2. Minh họa một hệ thống phân tán

Có nhiều ví dụ về các hệ thống phân tán được sử dụng rộng rãi trong đời sống
hằng ngày với nhiều ứng dụng đa dạng. Sau đây là một vài ví dụ điển hình của các hệ thống
phân tán:

- World Wide Web (WWW): Một dịch vụ phổ biến chạy trên Internet, cho phép các tài

liệu trong một máy tính tham chiếu đến thơng tin được lưu trữ trong các máy tính khác.
Internet và WWW đã thay đối cách chúng ta làm việc và thực hiện các hoạt động hằng ngày,
như: việc đặt vé máy bay, đặt phòng khách sạn hiện nay được thực hiện phần lớn thông qua

Internet; việc mua sắm qua Internet đã tăng đáng kể trong vài năm qua; hoặc hàng triệu
người hiện nay thường xuyên giao dịch cố phiếu qua Internet, V.V..
- Mạng xã hội'. Tương tác xã hội thông qua Internet đã chứng kiến sự phát triển mạnh
mẽ trong thời gian gần đây. Hàng tỷ người dùng hiện nay sử dụng máy tính để bàn, máy tính
xách tay hoặc điện thoại thơng minh để đăng và trao đổi tin nhắn, chia sẻ hình ảnh và video
với bạn bè qua các trang mạng xã hội. Sự tương tác giữa các thành viên thường dẫn đến việc
hình thành các cộng đồng ảo hoặc các câu lạc bộ có chung sờ thích.
- Mạng ngang hàng (Peer-to-Peer hay P2P): Các hệ thống P2P được dùng khá phổ
biến để chia sẻ file, phân phối nội dung và điện thoại Internet. Trong lịch sử, Napster là công
ty tiên phong trong việc sử dụng công nghệ P2P để chia sẻ các bộ sưu tập nhạc cá nhân của

khách hàng. Thay vì lưu trữ các bài hát trên một máy tính trung tâm, các bài hát được luu
trực tiếp trên máy của hàng triệu người dùng rải rác khắp nơi trên thế giới. Khi chúng ta sử
dụng Napster để tải một bài hát xuống, nghĩa là chúng ta đang tải bài hát đó xuống từ máy
của người khác, có thể là hàng xóm kế bên hoặc ai đó ở nửa vòng trái đất. Tuy nhiên, Napster
chưa phải là một hệ thống P2P thực sự, do vẫn sừ dụng một thư mục tập trung. Nhưng nhiều

19


hệ thống tiếp theo cung cấp dịch vụ tưong tự (ví dụ: Gnutella, KaZaA) đã tránh được sử
dụng máy chủ trung tâm hoặc thư mục trung tâm. Ngoài ra, các hệ thống P2P hiện cũng đang
được ứng dụng trong các lĩnh vực khác, ngoài việc trao đổi các tệp nhạc. Hàng triệu người
sử dụng ứng dụng Skype được xây dựng dựa trên cơng nghệ P2P cho điện thoại Internet và

trị chuyện video.

- Hệ thong phân tán thời gian thực'. Các hệ thống phân tán thời gian thực được phát
triến để xử lý sự phối hợp có yêu cầu khắt khe về mặt thời gian của các sự kiện trong một
môi trường phân tán về mặt địa lý. Ví dụ, trong hệ thống kiểm sốt giao thơng đơ thị, máy

tính ờ các điểm khác nhau sẽ kiếm sốt tín hiệu giao thơng để tối giản hóa việc tắc nghẽn và
tối đa hóa lưu lượng giao thơng.

- Điện tốn lưới'. Điện tốn lưới là một hình thức của tính tốn phân tán, giúp hỗ trợ
lập trình song song trên một mạng lưới các máy tính. Ở phạm vi nhơ, một lưới tính tốn có
thể sử dụng một phần nhỏ tài ngun tính toán của một hoặc hai tổ chức. Trong khi ở phạm
vi lớn, một lưới tính tốn có thể kết họp hàng triệu máy tính trên tồn thế giới để làm việc
trong các dự án tính tốn cực lớn. Mục tiêu là giải quyết các vấn đề tính tốn khó nhanh hon
và ít tốn kém hơn so với các phương pháp thơng thường.

- Điện tốn đám mây: Điện tốn đám mây cho phép khách hàng thuê ngoài việc sử
dụng phần mềm, lưu trữ dữ liệu và thậm chí cả cơ sở hạ tầng máy tính cho các trung tâm dữ
liệu từ xa. Khách hàng tương tác với nền tảng lưu trữ đám mây và các ứng dụng thơng qua
Internet bằng trình duyệt web của họ. Người dùng không cần mua hoặc duy trì phần cứng
và phần mềm đắt tiền nhưng vẫn hồn thành cơng việc của mình bằng cách trả tiền cho việc
sử dụng tài nguyên. Nhiệm vụ duy tri phần cứng và phần mềm tại các trung tâm dữ liệu
thuộc về nhà cung cấp dịch vụ đám mây, người chịu trách nhiệm giám sát việc chia sẻ liền
mạch các tài nguyên này và duy trì quyền riêng tư của dữ liệu người dùng.
1.2. ĐẶC ĐIẾM CỦA HỆ THỐNG ĐÒNG THỜI VÀ PHÂN TÁN

Nhớ lại rằng, chúng ta phân biệt giữa những hệ thống đồng thời và hệ thống phân tán
dựa trên việc có sử dụng bộ nhớ chia sẻ hay không. Một hệ thống phân tán được đặc trưng
bời việc thiếu bộ nhớ chia sẻ giữa các thành phần. Do đó, trong một hệ thống phân tán, một
bộ xử lý bất kỳ khơng thể biết được trạng thái tồn cục của hệ thống. Ket quả là, rất khó để
quan sát bất kỳ thuộc tính tồn cục nào của hệ thống. Chúng ta sẽ tim hiểu, ở các chương
sau, cách các thuật tốn hiệu quả có thế được phát triến đế đánh giá một tập giới hạn các
thuộc tính tồn bộ.
Bên cạnh sự phân bố về mặt vật lý, chúng ta cũng thường đặc trưng một hệ thống phân
tán với việc sử dụng sự phân bo logic hoặc chức năng của các thành phần xử lý. Một hệ
thống phân tán điển hình thỏa mãn các tiêu chí sau:


20


- Gồm nhiều tiến trình'. Hệ thống phân tán bao gồm nhiều hon một tiến trình xử lý tuần
tụ. Những tiến trình này có thể là tiến trinh hệ thống hoặc tiến trình người dùng, nhưng mỗi

tiến trình có một luồng điều khiển độc lập - một cách tường minh hoặc khơng tường minh.
- Giao tiếp liên tiến trình: Các tiến trình giao tiếp với nhau sử dụng các thơng điệp

(message). Các thông điệp này cần một thời gian hữu hạn để đi từ tiến trình này đến tiến
trình khác. Bản chất thật sự hoặc thứ tự của việc trì hỗn thơng điệp sẽ phụ thuộc vào các
đặc điểm vật lý của các kênh liên kết (channel) thông điệp.

- Phăn tách khơng gian địa chỉ: Các tiến trình có khơng gian địa chỉ riêng biệt. Một
bộ đa xử lý chia sẻ bộ nhớ sẽ không được coi là một biểu diễn thật sự của một hệ thống tính

tốn phân tán.

- Mục tiêu chung: Các tiến trình phải tương tác với nhau để đạt được một mục tiêu

chung.
Một hệ thống đồng thời hoặc phân tán có thế được liên kết chặt chẽ (tightly coupled)
hoặc liên kết lỏng lẻo (loosely coupled) phụ thuộc vào việc liệu nhiều bộ xử lý có làm việc

theo nhịp đồng hồ hay không. Việc thiếu một đồng hồ dùng chung sẽ dẫn đến một hệ thống
liên kết lỏng lẻo. Trong một hệ thống phân tán về mặt địa lý, việc đồng bộ các đồng hồ vật

lý riêng biệt của các bộ xử lý khác nhau một cách chính xác là bất khả thi bởi vì sự khơng
chắc chắn trong độ trễ giao tiếp giữa các bộ xử lý. Ket quả là, chúng ta hiếm khi sừ dụng các


đồng hồ vật lý cho việc đồng bộ hóa trong các hệ thống phân tán. Sau này, chúng ta sẽ tìm

hiểu cách khái niệm nhân quả (causality) được sử dụng thay cho khái niệm thời gian vật lý
để giải quyết vấn đề trên. Trong một hệ thống đồng thời, mặc dù một đồng hồ dùng chung
có thể được sử dụng để đồng bộ hóa, việc thiết kế hệ thống dựa trên một kiến trúc liên kết

chặt chẽ hiếm khi là một ý tưởng tốt, do mất mát hiệu suất vì q trình đồng bộ hóa.

Ngồi ra, các hệ thống phân tán có thể được phân loại thành hệ thống phân tán đồng
bộ và hệ thống phân tán bất đồng bộ. Một hệ thống phân tán là bất đồng bộ nếu khơng có

cận trên cho thời gian giao tiếp của thơng điệp. Giả định về tính bất đồng bộ dẫn tới hầu hết
các giải pháp chung cho nhiều bài toán khác nhau. Tuy nhiên, mọi thứ trở nên khó khăn
trong những hệ thống bất đồng bộ khi các bộ xử lý hoặc kênh liên kết có thể gặp sự cố. Trong

một hệ thống phân tán bất đồng bộ, việc phân biệt giữa một bộ xử lý chậm và một bộ xử lý
hỏng là điều bất khả thi. Điều này dẫn tới những khó khăn trong việc phát triển các thuật

tốn cho bài toán đồng thuận, bài toán bầu cử và rất nhiều bài tốn quan trọng khác trong
tính tốn phân tán. Chúng ta sẽ miêu tả những khó khăn này trong những chương sau

và cũng chỉ ra những thuật tốn có thể hoạt động dưới điều kiện lỗi trong những hệ thống
đồng bộ.

21


1.3. Sự TÀNG TỐC TRONG ỨNG DỤNG ĐÒNG THỜI


Theo lý thuyết, việc nâng cấp từ một bộ xử lý đơn (uniprocessor) sang một bộ đa xử
lý (multiprocessor) n > 1 lõi sẽ làm tăng sức mạnh tính tốn lên n lần. Tuy nhiên, trong thực
tế, đáng buồn thay, điều này chưa bao giờ xảy ra. Nguyên nhân chính là hầu hết các bài tốn

tính tốn thực tế khơng thể song song hóa một cách hiệu quả mà khơng chịu thêm chi phí
của việc giao tiếp và phối hợp liên bộ xử lý.
Đe minh họa, chúng ta hãy xét một ví dụ, trong đó năm họa sĩ quyết định sơn một căn
nhà có năm phịng. Neu tất cả các phịng có cùng kích thước thì việc gán cho mồi họa sĩ sơn
một căn phòng là họp lý và khi năm người sơn với một tốc độ gần như nhau, chúng ta sẽ
khiến cho công việc tăng tốc lên năm lần, so với trường họp chỉ có một người làm. Cơng
việc sẽ trở nên phức tạp hơn nếu các phịng có kích thước khác nhau. Ví dụ, nếu một phịng
có kích thước gấp đơi kích thước của các phịng khác thì cơng việc của năm họa sĩ sẽ không
thể tăng tốc năm lần, bởi vì thời gian hồn thành tồn bộ căn nhà bị chi phối bời căn phòng
cần nhiều thời gian nhất để sơn.

Cách phân tích này rất quan trọng cho tính tốn đồng thời. Cơng thức mà chúng ta cần
được gọi là Định luật của Amdahl, với quan niệm rằng quy mơ của việc chúng ta có thế tăng
tốc bất kỳ công việc phức tạp nào (không chỉ việc sơn phịng) bị giới hạn bởi số lượng cơng
việc phải được thực thi tuần tự. Theo nghĩa đơn giản, định luật của Amdahl nói rằng, chúng
ta có thể song song hóa hoặc phân tán tính tốn của chúng ta bao nhiêu tùy ý, để có thế tăng
hiệu suất, khi chúng ta thêm các tài ngun tính tốn. Tuy nhiên, chương trình của chúng ta
không thế nhanh hơn tốc độ của các thành phần tuần tự (nghĩa là, những thành phần không
thế song song hóa) được kết hợp bên trong trên một bộ xử lý đơn.
Chúng ta định nghĩa sự tăng tốc (speedup) s của một công việc là tỷ lệ giữa thời gian
một bộ xử lý cần để hoàn thành một công việc so với thời gian n bộ xử lý đồng thời cần để
hồn thiện cùng cơng việc đó.
c _ ^sequential

~ T___


1 concurrent

Trong đó, Tsequentiai là thời gian thực thi tuần tự của công việc và Tconcurrent là thời

gian thực thi đồng thời của cùng công việc.

Định luật của Amdahl miêu tả giá trị tăng tốc lớn nhất mà s có thể đạt được bởi n bộ
xử lý cộng tác với nhau trong một ứng dụng, trong đó p là phần cơng việc mà có thế được
thực thi song song. Đe đơn giản hóa, giả sử rằng một bộ xử lý đơn cần thời gian (đã chuẩn
hóa) là 1 đế hồn thành cơng việc. Với n bộ xử lý đồng thời, phần công việc song song cần
thời gian p/n và phần công việc tuần tự cần thời gian 1 — p. Tổng qt, cả q trình tính

tốn song song hóa cần thời gian là:
p
1—p+—
n

22


Từ đó, định luật của Amdahl nói rằng sự tăng tốc, tức là tỷ lệ giữa thời gian tuần tự
(của bộ xử lý đơn) và thời gian đồng thời, là:

Đe minh họa hàm ý của định luật của Amdahl, hãy trở lại ví dụ sơn phịng của chúng
ta với n = 5 họa sĩ. Giả sử mỗi phòng nhỏ là một đơn vị và một phòng lớn là hai đơn vị.
Gán cho mỗi họa sĩ (tương ứng với một bộ xử lý) một phòng, nghĩa là năm trên sáu đơn vị
có thể sơn song song, ám chỉ rằng p = 5/6 và 1 — p = 1/6. Định luật của Amdahl phát biểu
rằng kết quả tăng tốc của công việc này là:
1


1

1—p+
r n

1

ĨTB
“ŨĨ
“3
6^5
6 "b

Điều này là đáng lo ngại, năm họa sĩ làm việc trong năm phịng, trong đó một phịng
có kích thước gấp đơi các phịng khác chỉ tăng tốc cơng việc ba lần. Việc này có thể trở nên
xấu hơn. Hãy tưởng tượng chúng ta có 10 phịng và 10 họa sĩ, trong đó mồi họa sĩ được gán
cho một phịng, nhưng có một phịng có kích thước gấp đơi so với những phịng khác. Ket
quả tăng tốc là:
s=

1
- 1 = 5.5
ĩĩ + ĩĩ

Ờ đây, chúng ta thấy có một sự mất cân bằng, sử dụng 10 họa sĩ cho một công việc chỉ
tăng tốc công việc lên 5.5 lần, chỉ hơn một nửa kết quả mà chúng ta mong đợi.

Do đó, giải pháp dường như là ngay khi cơng việc của một họa sĩ ở một phịng được
hồn thành, ơng ấy sẽ qua giúp những người khác sơn các phòng còn lại. Tất nhiên, vấn đề
chia sẻ việc sơn phòng này sẽ phát sinh yêu cầu về sự phối hợp giữa các họa sĩ. Đây là điều

định luật của Amdahl đề cập đến về hiệu suất sử dụng của các máy tính đa bộ xử lý.
Một vài bài tốn tính tốn được gọi là “song song một cách bối rốĩ\ tức là, chúng có

thể dễ dàng được chia ra thành các thành phần có thể thực thi một cách đồng thời. Những
bài toán như vậy xuất hiện trong tính tốn khoa học hoặc trong xử lý đồ họa. Tuy nhiên, nhìn
chung, với một bài tốn cho trước và một máy tính 10 bộ xử lý, định luật Amdahl nói rằng
nếu chúng ta có thể quản lý để song song hóa 90% giải pháp, nhưng vẫn cịn lại 10% tuần
tự, thì chúng ta sẽ chỉ kết thúc với việc tăng tốc lên 5 lần, chứ không phải tăng tốc lên 10
lần. Nói cách khác, phần tuần tự cịn lại 10% mà chúng ta khơng thể song song hóa đã cắt đi
một nửa hiệu suất sử dụng của máy tính. Điều đó cho thấy sẽ đáng giá hơn nếu chúng ta đầu
tư cơng sức để song song hóa 10% cịn lại nhiều nhất có thể, ngay cả khi điều này là khó
khăn. Thơng thường, điều này là khó bởi vì những phần song song bổ sung thêm này sẽ liên
quan đáng kể đến sự giao tiếp và phối hợp giữa các thành phần, do đó làm tăng thêm chi phí.

23


Định luật của Amdahl có một hạn chế. Nó giả định rằng chúng ta xử lý cùng một dữ
liệu đầu vào giống nhau khi chúng ta tăng số lượng bộ xử lý. Nhưng thơng thường, khi chúng
ta có càng nhiều bộ xử lý, chúng ta muốn xử lý càng nhiều dữ liệu. Định luật của Gustafson
(hay Gustafson-Barsis) đề xuất rằng khi chúng ta có nhiều bộ xử lý, các bài tốn lớn hơn có
thế được giải quyết trong thời gian giống nhau, sử dụng công thức sau:
S = N + (1-N)*a

Trong đó: N là số lượng bộ xử lý; a là sự tăng tốc trong độ trễ thực thi của phần công
việc hường lợi từ sự cải thiện tài nguyên hệ thống.
1.4. CÁC THÁCH THỨC CỦA CHƯƠNG TRÌNH ĐỊNG THỜI VÀ PHÂN TÁN
Các thách thức lập trình xuất hiện ờ tất cả quy mô của một hệ thống đồng thời và phân
tán. Ở phạm vi nhỏ, các bộ xử lý trong một chip đơn cần phối hợp truy cập tới khu vực bộ
nhớ chia sẻ. Ở phạm vi rộng, các bộ xử lý trong một siêu máy tính cần phối họp việc định


tuyến dữ liệu. Lập trình đa bộ xử lý là thách thức bời vì các hệ thống máy tính hiện đại vốn
dĩ là bất đồng bộ', các tác vụ có thể bị treo hoặc trì hỗn mà khơng có cảnh báo bời các ngắt,
lỗi tranh quyền (preemption), lỗi thiếu cache và các lỗi khác. Những sự trì hỗn này vốn dĩ
là khơng thể dự đốn trước và có thể thay đổi rất nhiều về quy mơ, ví dụ: lỗi thiếu cache có
thể trì hỗn một bộ xử lý với ít hơn 10 chỉ lệnh, lỗi trang có thể trì hỗn với vài triệu chỉ lệnh
và lồi tranh quyền hệ điều hành có thể trì hỗn với hàng trăm triệu chỉ lệnh.
Như vậy, câu hỏi chúng ta cần phải trả lời khi xây dựng một hệ thống đồng thời và

phân tán là “Làm sao đê đồng bộ việc thực thỉ của các luồng hay tiến trình khác nhau và cho
phép chúng giao tiếp với nhau?”. Chúng ta phân biệt hai kiêu đồng bộ:
- Đồng bộ cạnh tranh'. Khi có nhiều hơn một luồng hoặc tiến trình sử dụng cùng một
tài nguyên chia sẻ, cần có một cơ chế loại trừ lẫn nhau để tránh các luồng hoặc tiến trình
gây cản trở sự thực thi của các luồng hoặc tiến trinh khác.
- Đồng bộ cộng tác'. Khi một luồng hoặc tiến trình đợi một luồng hoặc tiến trình khác
hồn thành thực thi trước khi nó có thế bắt đầu thực thi.
1.5. SO SÁNH HỆ THỐNG ĐÒNG THỜI VÀ HỆ THỐNG PHÂN TÁN

Trong phần này, chúng ta sẽ làm rõ sự khác biệt giữa hệ thống đồng thời và hệ thống
phân tán. Sự khác biệt này chỉ nằm ở mức logic. Với một hệ thống máy tính vật lý, trong đó
các bộ xử lý có bộ nhớ chia sẻ, việc mơ phỏng các thông điệp là khả thi. Ngược lại, với một
hệ thống máy tính vật lỷ, trong đó các bộ xử lý được kết nối bằng một mạng truyền thông,
việc mơ phỏng bộ nhớ chia sẻ cũng có thể thực hiện được. Do đó, một hệ thống phần cứng
song song có thể chạy phần mềm phân tán và ngược lại.
Sự phân biệt này làm xuất hiện hai câu hởi quan trọng: (1) Lỉệu chủng ta nên xây dựng
phần cứng song song hay phần cứng phân tán? (2) Liệu chúng ta nên viết các ứng dụng với
24



×