II.2 Trường hợp trao đổi giữa n tiến trình (n>2)
Tiến trình 1 (server) Tiến trình 2 (client) Tiến trình i (client) Tiến trình n (client)
II.2 Trường hợp trao đổi giữa n tiến trình (n>2)
II.2 Trường hợp trao đổi giữa n tiến trình (n>2)
Trong trường hợp này, có tất cả n tiến trình liên lạc gắn bó Trong trường hợp này, có tất cả n tiến trình liên lạc gắn bó với nhau. Để liên lạc được thông suốt, khi gửi một thông
với nhau. Để liên lạc được thông suốt, khi gửi một thông
điệp, một tiến trình thứ i phải gửi luôn cả định danh của
điệp, một tiến trình thứ i phải gửi luôn cả định danh của
mình để tiến trình nhân biết được nhận từ đâu. Vì vậy, hàm
mình để tiến trình nhân biết được nhận từ đâu. Vì vậy, hàm
gửi cơ sở sẽ có dạng như sau:
gửi cơ sở sẽ có dạng như sau:
- Đối với bên dịch vụ (server) cũng cần có các hàm cơ
- Đối với bên dịch vụ (server) cũng cần có các hàm cơ
sở:
sở:
(<Tên tiến trình>, <yêu cầu>)=Cho_thong_bao
(<Tên tiến trình>, <yêu cầu>)=Cho_thong_bao
để chờ thông báo đến từ một tiến trình cụ thể có tên là
để chờ thông báo đến từ một tiến trình cụ thể có tên là
<tên tiến trình> và yêu cầu mà nó muốn trả lời.
<tên tiến trình> và yêu cầu mà nó muốn trả lời.
Hàm
Hàm Loại_yeu_cau(<yêu cầu>) Loại_yeu_cau(<yêu cầu>)
- Để phân tích yêu cầu mà tiến trình gửi cần đáp ứng
- Để phân tích yêu cầu mà tiến trình gửi cần đáp ứng
và hàm
và hàm
Gui_tra_loi(<kết quả, <tên tiến trình>)
Gui_tra_loi(<kết quả, <tên tiến trình>) dùng để gửi dùng để gửi kết quả cho tiến trình yêu cầu.
Như vậy ta có các thuật toán:Như vậy ta có các thuật toán: Đối với phía yêu cầu
Đối với phía yêu cầu
Tiến trình thứ i (i>1)
tên=Gui_thong_diep(<yêu cầu>, <tiến trình 1>) Kết quả=Cho_tra_loi(<tiến trình 1>)
Kết thúc tiến trình i
Đối với phía phục vụ (tiến trình 1 - server)
Đối với phía phục vụ (tiến trình 1 - server)
Tiến trình 1
Vòng lặp
(<tên tiến trình gửi>, <yêu cầu>)=Cho_thong_bao Loại yêu cầu(<yêu cầu>)
;... thao tác trả lời theo yêu cầu vừa phân tích
Gui_tra_loi(<kết quả>, <tên tiến trình gửi>) Kết thúc vòng lặp
Sau khi thuật toán được đưa vào hoạt động, các tiến trình Sau khi thuật toán được đưa vào hoạt động, các tiến trình gửi yêu cầu cũng như trả lời đều biết mình gửi yêu cầu đến
gửi yêu cầu cũng như trả lời đều biết mình gửi yêu cầu đến
cho tiến trình nào và gửi yêu cầu trả lời cho ai.
cho tiến trình nào và gửi yêu cầu trả lời cho ai.
Tuy nhiên, ở đây chưa có cơ chế đồng bộ nên sẽ có nhiều Tuy nhiên, ở đây chưa có cơ chế đồng bộ nên sẽ có nhiều vấn đề phát sinh cần giải quyết như: khi tiến trình nhận
vấn đề phát sinh cần giải quyết như: khi tiến trình nhận
nhận cùng lúc hai yêu cầu thì thế nào? cần xử lý yêu cầu
nhận cùng lúc hai yêu cầu thì thế nào? cần xử lý yêu cầu
nào trước hoặc xảy ra tình trạng một tiến trình yêu cầu tiến
nào trước hoặc xảy ra tình trạng một tiến trình yêu cầu tiến
trình server trả lời nhưng chờ đến bất tận nhưng không có
trình server trả lời nhưng chờ đến bất tận nhưng không có
trả lời thì phải xử lý ra sao?... vấn đề này sẽ được bàn kỹ
trả lời thì phải xử lý ra sao?... vấn đề này sẽ được bàn kỹ
hơn trong phần đồng bộ các tiến trình.
Kết luận
Kết luận