Việc lập lịch và thực hiện các hành

Một phần của tài liệu QUẢN Lý d6cntt epu dai (Trang 51 - 54)

c, Chức năng xóa khu đất đấu giá

3.3.2 Việc lập lịch và thực hiện các hành

Một tác tử có thể thực hiện nhiều hành vi một cách đồng thời. Việc lập lịch cho các hành vi của tác tử ở đây không phải là đề cập tới việc ưu tiên thứ tự thực hiện giữa các hành vi, mà là các hành vi sẽ hợp tác với nhau như thế nào. Điều này có nghĩa là khi một hành vi được lập lịch, nó sẽ thực hiện phương thức action() từ đầu đến cuối và sẽ không có sự can thiệp nào vào quá trình thực hiện hành vi đó. Vì thế công việc của

chúng ta chỉ là chỉ định ra hành vi thực hiện tiếp theo khi một hành vi được hoàn thành.

Cách tiếp cận này có một vài điểm thuận lợi:

• Chỉ có một Java thread (tuyến) trên một tác tử (điều này khá quan trọng, đặc biệt là trong môi trường mà ở đó tài nguyên bị giới hạn, chẳng hạn như điện thoại di động)

• Cải thiện hiệu năng bởi vì việc chuyển đổi giữa các hành vi sẽ nhanh hơn rất nhiều so với việc chuyển đổi giữa các Java thread

• Loại bỏ tất cả các vấn đề về đồng bộ hóa giữa các hành vi đang đồng thời truy cập vào cùng một tài nguyên (điều này cũng làm cải thiện hiệu năng) bởi vì tất cả các hành vi chỉ được thực hiện trên một Java thread duy nhất. Hình dưới đây miêu tả sự thực hiện của một tác tử thread:

Khi không còn hành vi nào để thực hiện, thread của tác tử sẽ chuyển về trạng thái ngủ (sleep) để không làm tiêu tốn thời gian của CPU. Khi có một hành vi mới cần thực hiện, nó sẽ được đánh thức.

- Các loại hành vi: Có 3 loại hành vi

Hành vi loại One-shot

Một hành vi loại one-shot là hành vi mà phương thức action của nó chỉ thực hiện duy nhất một lần. Lớp jade.core.behaviours.OneShotBehaviour đã cài đặt sẵn phương thức done bằng việc trả về giá trị là true. Các hành vi thuộc loại one-shot sẽ kế thừa từ lớp này.

Hành vi loại Cyclic

Một hành vi loại Cyclic sẽ không bao giờ hoàn thành và phương thức action của nó sẽ được thực hiện công việc giống nhau mỗi lần nó được gọi. Lớp jade.core.behaviours.CyclicBehaviour cài đặt sẵn phương thức done bằng việc trả về giá trị là false. Các hành vi loại Cyclic sẽ kế thừa lớp này.

Hành vi loại Generic

Một hành vi loại Generic sẽ nhúng một trạng thái vào nó và thực hiện các công việc khác nhau tùy thuộc vào trạng thái đó. Hành vi được hoàn thành khi mà một điều kiện nào đó được thỏa mãn.

- Lập lịch công việc tại một thời điểm nhất định

JADE cung cấp cho chúng ta hai lớp (đều nằm trong lớp jade.core.behaviours) để cài đặt các hành vi và thực hiện chúng vào một thời điểm xác định.

Lớp WakerBehaviour, các phương thức action() và done() của nó đều đã được cài đặt sẵn và công việc của chúng ta chỉ là cài đặt phương thức trừu tượng handleElapsedTimeout(). Phương thức này sẽ được gọi sau một khoảng thời gian nào đó kể từ lúc hành vi bắt đầu. Sau khi thực hiện xong phương thức này, hành vi sẽ hoàn thành.

Lớp TickerBehaviour, các phương thức action() và done() của nó cũng đều đã được cài đặt. Chúng ta phải cài đặt phương thức trừu tượng là onTick() và phương thức này sẽ được gọi lặp đi lặp lại sau một khoảng thời gian nhất định. TickerBehaviour không bao giờ hoàn thành.

- Các hành vi được yêu cầu trong chương trình

Tác tử Auctioneer sẽ gửi yêu cầu về thông tin khu đất nó đấu giá đến các tác tử Bidder. Như vậy, chúng ta cần sử dụng một TickerBehaviour, sao cho mỗi lần tick, nó sẽ thực hiện các hành vi để gửi yêu cầu đến các tác tử Bidder.

Các hành vi của tác tử Bidder

Tác tử Bidder sẽ đợi các yêu cầu được gửi đến từ các tác tử Auctioneer và phục vụ chúng. Các yêu cầu này có thể là yêu cầu cho một sự cung ứng thông tin đặt giá đất hoặc yêu cầu thanh toán hóa đơn. Như vậy, chúng ta có thể thiết kế tác tử Bidder để cho nó thực hiện hai hành vi loại Cyclic: một cái để phục vụ các yêu cầu cho sự cung ứng thông tin đặt giá khu đất đến các tác tử Auctioneer, cái còn lại phục vụ các yêu cầu cho việc thanh toán hóa đơn. Thêm vào nữa, tác tử Auctioneer còn phải thực hiện một hành vi loại one-shot để cập nhật lại danh mục khi thêm khu đất mới để đấu giá.

Một phần của tài liệu QUẢN Lý d6cntt epu dai (Trang 51 - 54)

w