Tải bản đầy đủ

Tìm hiểu về các mô thức lập trình

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

BÁO CÁO
TÌM HIỂU VỀ CÁC MÔ THỨC LẬP TRÌNH

Học Phần: Kỹ Thuật Lập Trình
Giảng Viên Hướng Dẫn: Vũ Đức Vượng
Mã Lớp: 108505

1


I) Các mô thức lập trình phổ biến.
1. Imperative paradigm- Lập trình mệnh lệnh.
- Trong khoa học máy tính, Imperative paradigm là một mô thức lập trình sử dụng
câu lệnh để thay đổi trạng thái của chương trình. Nó giống với cách mà mệnh lệnh
thức trong ngôn ngữ tự nhiên diễn tả mệnh lệnh, một chương trình mệnh lệnh bao
gồm các mệnh lệnh (command) cho máy tính để thực hiện. Imperative paradigm
tập trung vào miêu tả cách một chương trình hoạt động.
* Ví dụ sử dụng Imperative paradigm :
//số thứ n trong dãy Fibonacci

int main()
{
int n, fib0, fib1, t, fibn;
n = 10;
fib0 = 0;
fib1 = 1;
while (n > 0)
{
t = fib0;
fib0 = fib1;
fib1 = fib0 + t;
n--;
}
fibn = fib0;
}

* Kết quả: fib10=55

2. Functional paradigm- Lập trình chức năng
2


- Trong khoa học máy tính, Functional paradigm là một mô thức lập trình theo
phong cách xây dựng cấu trúc và các yếu tố của các chương trình máy tính, bộ xử
lý tính toán như là sự đánh giá các hàm toán học nhằm tránh sự thay đổi trạng thái
dữ liệu. Đây là một mô hình lập trình khai báo (Declarative programming), được
thực hiện bởi các biểu thức hoặc khai báo thay vì các câu lệnh. Trong mã chức
năng giá trị đầu ra của hàm chỉ phụ thuộc vào các đối số được truyền cho hàm, vì
vậy việc gọi hàm f hai lần với cùng giá trị đối số x tạo ra cùng một kết quả f(x) mỗi
lần.
* Ví dụ sử dụng Functional paradigm :
// Tính ước chung lớn nhất của x và y
int ucln(int x, int y)
{
if (y == 0)
{
return x;
}
else
{
return ucln(y, x%y);
}
}
int main()
{
int x, y;
x = 32;
y = 12;
ucln(x, y);
}
* Thứ tự tính toán của chương trình trên:
B0: ucln(32,12)
B1: ucln(12,8)
B2: ucln(8,4)
3


B3: ucln(4,0)
B4: => Ước chung lớn nhất là 4.
3. Logical paradigm- Lập trình Logic
- Logical paradigm là một loại mô thức lập trình mà phần lớn dựa trên logic hình
thức . Bất kỳ chương trình nào được viết bằng ngôn ngữ lập trình logic là một tập
hợp các câu ở dạng logic, diễn đạt các sự kiện và quy tắc về một số miền vấn
đề. Các họ ngôn ngữ lập trình logic chính bao gồm Prolog , lập trình bộ trả
lời (ASP) và Datalog . Trong tất cả các ngôn ngữ này, các quy tắc được viết dưới
dạng mệnh đề: H :- B1, …, Bn và được đọc khai báo là hàm ý logic: H if B 1 and …
and Bn
Trong đó H được gọi là phần đầu của quy tắc và B1Bn được gọi là phần thân . Sự
kiện là các quy tắc không có phần thân và được viết dưới dạng đơn giản là: H.
- Việc đọc khai báo các chương trình logic có thể được sử dụng bởi một lập trình
viên để xác minh tính đúng đắn của chúng. Hơn nữa, các kỹ thuật chuyển đổi
chương trình dựa trên logic cũng có thể được sử dụng để chuyển đổi các chương
trình logic thành các chương trình tương đương logic hiệu quả hơn. Trong họ ngôn
ngữ lập trình logic Prolog, lập trình viên cũng có thể sử dụng cách giải quyết vấn
đề đã biết của cơ chế thực thi để cải thiện hiệu quả của các chương trình.
* Ví dụ sử dụng Logical paradigm:
Brother(X,Y)
:Farther(F,X),
Farther(F,Y),
Mother(M,X),
Mother(M,Y),
Male(X).
(X là anh trai của Y khi họ có chung bố (F), chung mẹ (M) và X có giới tính nam).
4. Object-oriented paradigm- Lập trình hướng đối tượng
- Object-oriented paradigm (OOP) là một mô thức lập trình dựa trên khái niệm
objects (đối tượng), có thể chứa dữ liệu, dưới dạng các trường thường được gọi là
4


thuộc tính và mã, dưới dạng thủ tục thường gọi là phương thức. Một tính năng của
các đối tượng là các thủ tục của đối tượng có thể truy cập và thường sửa đổi các
trường dữ liệu của đối tượng mà chúng được liên kết. Trong OOP, các chương trình
máy tính được thiết kế bằng cách làm cho chúng ra khỏi các đối tượng tương tác
với nhau. Có sự đa dạng đáng kể của các ngôn ngữ OOP, nhưng những ngôn ngữ
phổ biến nhất là dựa trên lớp, có nghĩa là các đối tượng là các thể hiện của các lớp,
thường xác định loại của chúng.
- Nhiều ngôn ngữ lập trình được sử dụng rộng rãi nhất (như C ++, Object Pascal,
Java, Python, vv) là các ngôn ngữ lập trình đa mô hình hỗ trợ lập trình hướng đối
tượng ở mức độ lớn hơn hoặc thấp hơn, thường kết hợp với lập trình thủ tục, bắt
buộc. Các ngôn ngữ OOP phổ biến bao gồm: Java, C++, C#, Python, PHP,
JavaScript, Ruby, Perl, Object Pascal, Objective-C, Dart, Swift, Scala, Common
Lisp và Smalltalk.

*Ví dụ sử dụng Object-oriented paradigm trong :
class staf
{
private:
char name[50];
int code;
public:
void getdata();
void display();
};
class typist : public staf
{
private:
int speed;
public:
void getdata();
void display();
};

5


5. Visual paradigm- Lập trình trực quan.
- Visual paradigm language là bất kỳ ngôn ngữ lập trình nào cho phép người dùng
tạo chương trình bằng cách thao tác các yếu tố chương trình bằng đồ họa thay vì
chỉ định chúng bằng văn bản. Một VPL cho phép lập trình với các biểu thức trực
quan, sắp xếp không gian của các ký hiệu văn bản và đồ họa, được sử dụng làm
thành phần của cú pháp hoặc ký hiệu phụ .
- Ví dụ: nhiều VPL (được gọi là lập trình dataflow hoặc sơ đồ ) được dựa trên ý
tưởng về "hộp và mũi tên", trong đó các hộp hoặc các đối tượng màn hình khác
được coi là các thực thể, được kết nối bằng mũi tên, đường hoặc vòng cung biểu
thị quan hệ.

*Ví dụ sử dụng dataflow:

6


6. Parallel paradigms- Lập trình song song.
- Tính toán song song (Parallel Computing) là việc chia một công việc ra thành các
công việc nhỏ và cho các công việc này thực hiện đồng thời với nhau bởi các hệ
thống có nhiều bộ vi xử lý (multiprocessor) hay bộ vi xử lý đa nhân (multicore)
nhằm giảm thời gian thực hiện công việc đó xuống. Việc lập trình để tách ra các
công việc nhỏ và sắp xếp để xử lý song song thì được gọi là lập trình song song.
- Tính toán song song có liên quan chặt chẽ với tính toán tương tranh, các công
cụ này thường được sử dụng cùng nhau và thường bị xáo trộn, mặc dù hai yếu tố
này rất khác biệt: có thể có song song mà không cần tương tranh (như bit-level
parallelism) và đồng thời không có song song (như đa nhiệm bằng cách chia sẻ
thời gian trên CPU lõi đơn). Trong điện toán song song, một tác vụ tính toán
thường được chia thành nhiều, thường là nhiều tác vụ phụ rất giống nhau có thể
được xử lý độc lập và kết quả được kết hợp sau đó, sau khi hoàn thành. Ngược lại,
trong điện toán đồng thời, các quy trình khác nhau thường không giải quyết các
nhiệm vụ liên quan; khi họ làm, như là điển hình trong điện toán phân tán, các tác
vụ riêng biệt có thể có tính chất đa dạng và thường yêu cầu một số giao tiếp giữa
các quá trình trong khi thực hiện.
- Các máy tính song song có thể được phân loại một cách đại khái theo mức độ mà
phần cứng hỗ trợ song song, với các máy tính đa lõi và đa xử lý có nhiều thành
phần xử lý trong một máy, trong khi các cụm , MPP và lưới sử dụng nhiều máy
tính để làm việc như nhau bài tập. Kiến trúc máy tính song song chuyên dụng đôi
khi được sử dụng cùng với các bộ xử lý truyền thống, để tăng tốc các tác vụ cụ thể.
- Trong một số trường hợp, tính song song là trong suốt đối với người lập trình,
chẳng hạn như song song ở mức bit hoặc mức hướng dẫn, nhưng các thuật toán
song song rõ ràng , đặc biệt là các thuật toánsử dụng đồng thời, khó viết hơn các
trình tự tuần tự, bởi vì đồng thời giới thiệu một số mới các lớp lỗi phần mềm tiềm
năng , trong đó điều kiện chủng tộc là phổ biến nhất. Giao tiếp và đồng bộ hóa giữa
các nhiệm vụ khác nhau thường là một trong những trở ngại lớn nhất để có được
hiệu suất chương trình song song tốt.

7


8


7. Concurrent programming- Lập trình tương tranh.

- Lập trình tương tranh là một hình thức điện toán trong đó một số tính toán được
thực hiện trong các khoảng thời gian chồng chéo, đồng thời là một phần tử liên
tục (một hoàn thành trước khi bắt đầu tiếp theo). Đây là một thuộc tính của một hệ
thống, đây có thể là một chương trình riêng lẻ , một máy tính hoặc một mạng
mạng và có một điểm thực thi riêng hoặc "luồng điều khiển" cho mỗi tính toán
("quy trình"). Một hệ thống đồng thời là một hệ thống trong đó một tính toán có
thể tiến lên mà không cần chờ tất cả các tính toán khác hoàn thành.
- Cũng như một mô hình lập trình, lập trình tương tranh là một dạng lập trình môđun , cụ thể là chia nhỏ một tính toán tổng thể thành các tính toán con có thể được
thực hiện đồng thời. Những người tiên phong trong lĩnh vực tính toán đồng thời
bao gồm Edsger Dijkstra, Per Brinch Hansen và CAR Hoare.

8. Distributed programming- Lập trình phân tán.

9


- Lập trình phân tán là một dạng của lập trình song song (tính toán song song). Lập
trình song song tạo ra mối liên hệ giữa máy tính và các đơn vị tính toán, khiến
chúng hoạt động đồng thời đối với một vấn đề cụ thể (dự báo thời tiết chẳng hạn).
Các đơn vị tính toán có thể đặt rất gần nhau hoặc tách rời nhau. Khi các đơn vị tính
toán được đặt tách rời, ta gọi đó là lập trình phân tán. Với mô hình lập trình này,
các đơn vị tính toán thường rất khác nhau, cũng như sự khác nhau giữa các hệ điều
hành và thiết lập mạng máy tính. Những yếu tố đó khiến cho việc lập trình các tính
toán của máy tính trở nên tương đối phức tạp và khó khăn. Lập trình mạng phân
tán, thường có 2 khái niệm chính: peer to peer và client - server... peer to peer là
lập trình ngang hàng giữa 2 máy tính... còn lập trình client - server là lập trình cho
phép n máy client kết nối tới m máy server - đây cũng là mô hình chúng ta sẽ gặp
nhiều trong thực tế.

9. Extreme programming- Lập trình cực độ.

10


- Extreme programming (XP) là một phương pháp phát triển phần mềm nhằm cải
thiện chất lượng phần mềm và khả năng đáp ứng các yêu cầu của khách hàng. Là
một loại phát triển phần mềm linh hoạt, nó chủ trương phát hành thường xuyên
trong các chu kỳ phát triển ngắn, nhằm cải thiện năng suất và đưa ra các điểm kiểm
tra theo đó các yêu cầu mới của khách hàng có thể được chấp nhận.
- Các yếu tố khác của lập trình cực độ bao gồm: lập trình theo cặp hoặc thực
hiện đánh giá mã mở rộng , kiểm tra đơn vị tất cả mã, tránh lập trình các tính năng
cho đến khi chúng thực sự cần thiết, cấu trúc quản lý phẳng, đơn giản mã và rõ
ràng, mong muốn thay đổi theo yêu cầu của khách hàng theo thời gian vượt qua và
vấn đề được hiểu rõ hơn, và giao tiếp thường xuyên với khách hàng và giữa các lập
trình viên. Phương pháp luận lấy tên từ ý tưởng rằng các yếu tố có lợi của thực
hành kỹ thuật phần mềm truyền thống được đưa đến mức cực độ. Ví dụ, đánh giá
mã được coi là một thực hành có lợi, đưa đến cực đoan, mã có thể được xem xét
liên tục , tức là thực hành lập trình cặp.

II) Distributed programming- Lập trình phân tán.
- Lập trình phân tán là một lĩnh vực của khoa học máy tính nghiên cứu các hệ
thống phân tán. Một hệ thống phân tán là một hệ thống có các thành phần được đặt
11


trên các máy tính nối mạng khác nhau, chúng giao tiếp và phối hợp các hành động
của chúng bằng cách truyền tin nhắn cho nhau. Các thành phần tương tác với nhau
để đạt được mục tiêu chung. Ba đặc điểm quan trọng của hệ thống phân tán là:
đồng thời các thành phần, thiếu đồng hồ toàn cầu và sự thất bại độc lập của các
thành phần. Ví dụ về các hệ thống phân tán khác nhau, từ các hệ thống dựa trên
SOA đến các trò chơi trực tuyến nhiều người chơi cho các ứng dụng ngang hàng.
- Một chương trình máy tính chạy trong một hệ thống phân tán được gọi là chương
trình phân tán (và lập trình phân tán là quá trình viết các chương trình đó). Có
nhiều loại triển khai khác nhau cho cơ chế truyền thông điệp, bao gồm HTTP
thuần, các trình kết nối giống như RPC và hàng đợi tin nhắn.
- Lập trình phân tán cũng đề cập đến việc sử dụng các hệ thống phân tán để giải
quyết các vấn đề tính toán. Trong điện toán phân tán , một vấn đề được chia thành
nhiều nhiệm vụ, mỗi nhiệm vụ được giải quyết bằng một hoặc nhiều máy tính, liên
lạc với nhau thông qua việc truyền tin nhắn.

1. Giới thiệu
Từ “song song” trong các thuật ngữ như “hệ thống song song”, “lập trình phân
tán” và “thuật toán phân tán” ban đầu được gọi là các mạng máy tính nơi các máy
tính riêng lẻ được phân phối vật lý trong một số khu vực địa lý. Các thuật ngữ ngày
nay được sử dụng theo nghĩa rộng hơn nhiều, thậm chí đề cập đến các quy trình tự
trị chạy trên cùng một máy tính vật lý và tương tác với nhau bằng cách truyền tin
nhắn.
* Mặc dù không có định nghĩa duy nhất về hệ thống phân tán, các thuộc tính xác
định sau thường được sử dụng như:
- Có một số thực thể tính toán tự trị (máy tính hoặc nút), mỗi thực thể có bộ
nhớ cục bộ riêng.
- Các thực thể giao tiếp với nhau bằng cách gửi tin nhắn.
Một hệ thống phân tán có thể có một mục tiêu chung, chẳng hạn như giải quyết
một vấn đề tính toán lớn, người dùng sau đó coi bộ sưu tập các bộ xử lý tự trị là
một đơn vị. Ngoài ra, mỗi máy tính có thể có người dùng riêng với nhu cầu riêng
và mục đích của hệ thống phân tán là phối hợp sử dụng các tài nguyên được chia sẻ
hoặc cung cấp dịch vụ liên lạc cho người dùng.
12


* Các đặc tính điển hình khác của hệ thống phân tán bao gồm:
- Hệ thống phải chịu đựng các lỗi trong các máy tính cá nhân.
- Cấu trúc của hệ thống (cấu trúc liên kết mạng, độ trễ mạng, số lượng máy tính)
không được biết trước, hệ thống có thể bao gồm các loại máy tính và liên kết mạng
khác nhau và hệ thống có thể thay đổi trong quá trình thực hiện chương trình phân
tán.
- Mỗi máy tính chỉ có một cái nhìn hạn chế, không đầy đủ về hệ thống. Mỗi máy
tính có thể chỉ biết một phần của đầu vào.
2.Tính toán song song và phân tán
Hệ thống phân tán là các nhóm máy tính nối mạng, có cùng mục tiêu cho công
việc của họ. Các thuật ngữ " điện toán đồng thời ", " điện toán song song " và "điện
toán phân tán" có rất nhiều sự trùng lặp và không có sự phân biệt rõ ràng giữa
chúng. Cùng một hệ thống có thể được mô tả cả "song song" và "phân phối"; các
bộ xử lý trong một hệ thống phân tán điển hình chạy song song. Điện toán song
song có thể được coi là một dạng điện toán phân tán được kết hợp chặt chẽ, và điện
toán phân tán có thể được coi là một dạng điện toán song song lỏng lẻo. Tuy nhiên,
có thể phân loại đại khái các hệ thống đồng thời là "song song" hoặc "phân phối"
bằng các tiêu chí sau:
Trong điện toán song song, tất cả các bộ xử lý có thể có quyền truy cập vào bộ nhớ
dùng chung để trao đổi thông tin giữa các bộ xử lý.
Trong điện toán phân tán, mỗi bộ xử lý có bộ nhớ riêng (bộ nhớ phân tán). Thông
tin được trao đổi bằng cách chuyển tin nhắn giữa các bộ xử lý.
Hình bên dưới minh họa sự khác biệt giữa các hệ thống phân tán và song
song. Hình (a) là một khung nhìn sơ đồ của một hệ thống phân tán điển hình; hệ
thống được biểu diễn dưới dạng cấu trúc liên kết mạng trong đó mỗi nút là một
máy tính và mỗi dòng kết nối các nút là một liên kết giao tiếp. Hình (b) hiển thị
cùng một hệ thống phân tán chi tiết hơn: mỗi máy tính có bộ nhớ cục bộ riêng và
thông tin chỉ có thể được trao đổi bằng cách gửi tin nhắn từ nút này sang nút khác
bằng cách sử dụng các liên kết giao tiếp có sẵn. Hình (c) cho thấy một hệ thống
song song trong đó mỗi bộ xử lý có quyền truy cập trực tiếp vào bộ nhớ dùng
chung.

13


Tình hình còn phức tạp hơn bởi việc sử dụng truyền thống các thuật ngữ song song
và thuật toán phân tán không hoàn toàn khớp với các định nghĩa trên của các hệ
thống song song và phân tán (xem bên dưới để thảo luận chi tiết hơn). Tuy nhiên,
theo nguyên tắc thông thường, tính toán song song hiệu năng cao trong bộ xử lý đa
bộ nhớ dùng chung sử dụng thuật toán song song trong khi sự phối hợp của hệ
thống phân tán quy mô lớn sử dụng thuật toán phân tán.
3.Lịch sử

14


Việc sử dụng các quy trình đồng thời liên lạc bằng cách truyền thông điệp có
nguồn gốc từ các kiến trúc hệ điều hành được nghiên cứu trong những năm
1960. Các hệ thống phân tán rộng rãi đầu tiên là các mạng cục bộ như Ethernet ,
được phát minh vào những năm 1970.
ARPANET , tiền thân của Internet , được giới thiệu vào cuối những năm 1960
và e-mail ARPANET được phát minh vào đầu những năm 1970. E-mail đã trở
thành ứng dụng thành công nhất của ARPANET, và đây có lẽ là ví dụ sớm nhất về
một ứng dụng phân tán quy mô lớn . Ngoài ARPANET, và người kế nhiệm của nó,
Internet, các mạng máy tính đầu tiên trên toàn thế giới khác bao
gồm Usenet và FidoNet từ những năm 1980, cả hai đều được sử dụng để hỗ trợ các
hệ thống thảo luận phân tán.
Nghiên cứu về điện toán phân tán đã trở thành nhánh khoa học máy tính của riêng
nó vào cuối những năm 1970 và đầu những năm 1980. Hội nghị đầu tiên trong lĩnh
vực, Hội nghị chuyên đề về nguyên tắc tính toán phân tán (PODC), bắt đầu từ năm
1982, và Hội nghị chuyên đề quốc tế về tính toán phân tán (DISC) lần đầu tiên
được tổ chức tại Ottawa vào năm 1985 với tư cách là Hội thảo quốc tế về thuật
toán phân tán trên đồ thị.
4.Kiến trúc
Kiến trúc phần cứng và phần mềm khác nhau được sử dụng cho điện toán phân
tán. Ở cấp độ thấp hơn, cần kết nối nhiều CPU với một số loại mạng, bất kể mạng
đó được in trên bảng mạch hay được tạo thành từ các thiết bị và cáp được ghép
lỏng lẻo. Ở mức cao hơn, cần kết nối các tiến trình đang chạy trên các CPU đó với
một số hệ thống truyền thông.
Lập trình phân tán thường rơi vào một trong một số kiến trúc cơ bản: máy chủ
client , ba tầng , n -tier hoặc ngang hàng, hoặc loại: khớp nối lỏng lẻo , hoặc khớp
nối chặt chẽ.
Máy chủ Client sâu : kiến trúc nơi khách hàng thông minh liên hệ với máy chủ để
lấy dữ liệu sau đó định dạng và hiển thị nó cho người dùng. Đầu vào tại máy khách
được cam kết trở lại máy chủ khi nó thể hiện một sự thay đổi vĩnh viễn.
Ba tầng : các kiến trúc di chuyển trí thông minh của khách hàng đến tầng trung lưu
để khách hàng không trạng thái có thể được sử dụng. Điều này giúp đơn giản hóa
việc triển khai ứng dụng. Hầu hết các ứng dụng web là ba tầng.

15


n -tier : các kiến trúc thường đề cập đến các ứng dụng web nhằm chuyển tiếp yêu
cầu của họ đến các dịch vụ doanh nghiệp khác. Loại ứng dụng này là một trong
những trách nhiệm nhất cho sự thành công của các máy chủ ứng dụng .
Ngang ngang hàng : kiến trúc nơi không có máy móc đặc biệt cung cấp dịch vụ
hoặc quản lý tài nguyên mạng. Thay vào đó, tất cả các trách nhiệm được phân chia
thống nhất giữa tất cả các máy, được gọi là đồng nghiệp. Các máy ngang hàng có
thể phục vụ cả dưới dạng máy khách và máy chủ.
Một khía cạnh cơ bản khác của kiến trúc điện toán phân tán là phương pháp giao
tiếp và phối hợp công việc giữa các quy trình đồng thời. Thông qua các giao thức
truyền thông điệp khác nhau, các quy trình có thể giao tiếp trực tiếp với nhau,
thường là trong mối quan hệ chủ / nô lệ . Ngoài ra, kiến trúc "trung tâm cơ sở dữ
liệu" có thể cho phép tính toán phân tán được thực hiện mà không cần bất kỳ hình
thức giao tiếp giữa các quá trình trực tiếp nào , bằng cách sử dụng cơ sở dữ
liệu dùng chung.
5.Ứng dụng
Lý do sử dụng hệ thống phân tán và tính toán phân tán có thể bao gồm:
Bản chất của một ứng dụng có thể yêu cầu sử dụng mạng truyền thông kết nối một
số máy tính: ví dụ: dữ liệu được tạo ra ở một vị trí thực tế và được yêu cầu ở một
vị trí khác.
Về nguyên tắc, có nhiều trường hợp sử dụng một máy tính duy nhất có thể, nhưng
việc sử dụng một hệ thống phân tán có lợi cho các lý do thực tế. Ví dụ, có thể hiệu
quả hơn về chi phí để đạt được mức hiệu suất mong muốn bằng cách sử dụng
một cụm của một số máy tính cấp thấp, so với một máy tính cao cấp duy nhất. Một
hệ thống phân tán có thể cung cấp độ tin cậy cao hơn một hệ thống không phân tán,
vì không có điểm thất bại duy nhất . Hơn nữa, một hệ thống phân tán có thể dễ
dàng mở rộng và quản lý hơn một hệ thống đơn bộ xử lý nguyên khối.
6.Ví dụ
* Ví dụ về các hệ thống phân tán và ứng dụng của điện toán phân tán bao gồm:
+ Mạng viễn thông :
- Mạng điện thoại và mạng di động
- Mạng máy tính như Internet
16


- Mạng cảm biến không dây
- Thuật toán định tuyến
+ Ứng dụng mạng:
- World Wide Web và các mạng ngang hàng
- Nhiều trò chơi trực tuyến nhiều người chơi và cộng đồng thực tế ảo
- Cơ sở dữ liệu phân tán và hệ thống quản lý cơ sở dữ liệu phân tán
- Hệ thống tập tin mạng
- Hệ thống xử lý thông tin phân tán như hệ thống ngân hàng và hệ thống đặt chỗ
của hãng hàng không
+ Kiểm soát quá trình thời gian thực:
- Hệ thống điều khiển máy bay
- Hệ thống điều khiển công nghiệp
+ Tính toán song song :
- Điện toán khoa học , bao gồm điện toán cụm và điện toán lưới và các dự án điện
toán tình nguyện khác nhau (xem danh sách các dự án điện toán phân tán ),
- Phân phối kết xuất trong đồ họa máy tính
7.Cơ sở lý thuyết
- Mô hình
Nhiều tác vụ mà chúng tôi muốn tự động hóa bằng cách sử dụng máy tính thuộc
loại câu hỏi Câu hỏi: chúng tôi muốn đặt câu hỏi và máy tính sẽ đưa ra câu trả
lời. Trong khoa học máy tính lý thuyết , các nhiệm vụ như vậy được gọi là các vấn
đề tính toán . Chính thức, một vấn đề tính toán bao gồm các trường hợp cùng với
một giải pháp cho từng trường hợp. Trường hợp là những câu hỏi mà chúng ta có
thể hỏi, và giải pháp là câu trả lời mong muốn cho những câu hỏi này.
Khoa học máy tính lý thuyết tìm cách hiểu những vấn đề tính toán nào có thể được
giải quyết bằng cách sử dụng máy tính (lý thuyết tính toán) và hiệu quả lý thuyết
phức tạp tính toán). Theo truyền thống, người ta nói rằng một vấn đề có thể được
giải quyết bằng cách sử dụng máy tính nếu chúng ta có thể thiết kế một thuật
toán tạo ra một giải pháp chính xác cho bất kỳ trường hợp cụ thể nào. Một thuật
toán như vậy có thể được thực hiện như một chương trình máy tính chạy trên máy
17


tính có mục đích chung: chương trình đọc một trường hợp vấn đề từ đầu vào , thực
hiện một số tính toán và tạo ra giải pháp làm đầu ra . Các hình thức như máy truy
cập ngẫu nhiên hoặc máy Turing phổ dụngcó thể được sử dụng như các mô hình
trừu tượng của một máy tính đa năng tuần tự thực hiện một thuật toán như vậy.
Lĩnh vực điện toán đồng thời và phân tán nghiên cứu các câu hỏi tương tự trong
trường hợp có nhiều máy tính hoặc máy tính thực thi mạng lưới các quy trình
tương tác: vấn đề tính toán nào có thể được giải quyết trong mạng như vậy và hiệu
quả như thế nào? Tuy nhiên, không rõ ràng ý nghĩa của việc "giải quyết vấn đề"
trong trường hợp hệ thống đồng thời hoặc phân tán: ví dụ, nhiệm vụ của người
thiết kế thuật toán là gì và tương đương đồng thời hoặc phân tán của một chuỗi
tuần tự là gì Máy tính mục đích chung?
Các cuộc thảo luận dưới đây tập trung vào trường hợp của nhiều máy tính, mặc dù
nhiều vấn đề giống nhau đối với các quy trình đồng thời chạy trên một máy tính.
* Ba quan điểm thường được sử dụng:
+ Các thuật toán song song trong mô hình bộ nhớ chia sẻ
- Tất cả các bộ xử lý có quyền truy cập vào một bộ nhớ chia sẻ. Trình thiết kế thuật
toán chọn chương trình được thực hiện bởi mỗi bộ xử lý.
- Một mô hình lý thuyết là các máy truy cập ngẫu nhiên song song (PRAM) được
sử dụng. Tuy nhiên, mô hình PRAM cổ điển giả định truy cập đồng bộ vào bộ nhớ
dùng chung.
- Các chương trình bộ nhớ dùng chung có thể được mở rộng cho các hệ thống phân
tán nếu hệ điều hành bên dưới đóng gói giao tiếp giữa các nút và hầu như thống
nhất bộ nhớ trên tất cả các hệ thống riêng lẻ.
- Một mô hình gần với hoạt động của các máy đa bộ xử lý trong thế giới thực và có
tính đến việc sử dụng các hướng dẫn máy, như So sánh và trao đổi (CAS), là bộ
nhớ chia sẻ không đồng bộ . Có rất nhiều công việc về mô hình này, một bản tóm
tắt có thể được tìm thấy trong tài liệu.
+ Các thuật toán song song trong mô hình truyền tin
- Nhà thiết kế thuật toán chọn cấu trúc của mạng, cũng như chương trình được thực
hiện bởi mỗi máy tính.
- Các mô hình như mạch Boolean và mạng phân loại được sử dụng. Một mạch
Boolean có thể được xem như một mạng máy tính: mỗi cổng là một máy tính chạy
18


một chương trình máy tính cực kỳ đơn giản. Tương tự, một mạng sắp xếp có thể
được xem như một mạng máy tính: mỗi bộ so sánh là một máy tính.
+ Các thuật toán phân tán trong mô hình truyền tin
- Người thiết kế thuật toán chỉ chọn chương trình máy tính. Tất cả các máy tính
chạy cùng một chương trình. Hệ thống phải hoạt động chính xác bất kể cấu trúc
của mạng.
- Một mô hình thường được sử dụng là một biểu đồ với một máy trạng thái hữu
hạn trên mỗi nút.
Trong trường hợp thuật toán phân tán, các vấn đề tính toán thường liên quan đến
đồ thị. Thông thường biểu đồ mô tả cấu trúc của mạng máy tính là ví dụ vấn
đề. Điều này được minh họa trong ví dụ sau đây.
Một ví dụ
Hãy xem xét vấn đề tính toán của việc tìm màu của đồ thị G đã cho . Các lĩnh vực
khác nhau có thể có các cách tiếp cận sau:
- Các thuật toán tập trung
Biểu đồ G được mã hóa dưới dạng chuỗi và chuỗi được đưa ra làm đầu vào cho
máy tính. Chương trình máy tính tìm thấy màu của đồ thị, mã hóa màu dưới dạng
chuỗi và đưa ra kết quả.
- Thuật toán song song
Một lần nữa, đồ thị G được mã hóa dưới dạng chuỗi. Tuy nhiên, nhiều máy tính có
thể truy cập cùng một chuỗi song song. Mỗi máy tính có thể tập trung vào một
phần của biểu đồ và tạo màu cho phần đó.
Trọng tâm chính là tính toán hiệu năng cao khai thác sức mạnh xử lý của nhiều
máy tính song song.
- Thuật toán phân tán
Đồ thị G là cấu trúc của mạng máy tính. Có một máy tính cho mỗi nút của G và
một liên kết truyền thông cho mỗi cạnh của G. Ban đầu, mỗi máy tính chỉ biết về
hàng xóm trực tiếp của nó trong biểu đồ G, các máy tính phải trao đổi tin nhắn với
nhau để khám phá thêm về cấu trúc của G. Mỗi máy tính phải tạo ra màu sắc riêng
của nó là đầu ra.
Trọng tâm chính là điều phối hoạt động của một hệ thống phân tán tùy ý.
19


Trong khi lĩnh vực thuật toán song song có trọng tâm khác với lĩnh vực thuật toán
phân tán, có rất nhiều tương tác giữa hai trường. Ví dụ, thuật toán ColeTHER
Vishkin để tô màu đồ thị ban đầu được trình bày dưới dạng thuật toán song song,
nhưng kỹ thuật tương tự cũng có thể được sử dụng trực tiếp như một thuật toán
phân tán.
Hơn nữa, một thuật toán song song có thể được thực hiện trong một hệ thống song
song (sử dụng bộ nhớ dùng chung) hoặc trong một hệ thống phân tán (sử dụng
chuyển tin nhắn). Ranh giới truyền thống giữa các thuật toán song song và phân
tán (chọn một mạng phù hợp so với chạy trong bất kỳ mạng cụ thể nào) không nằm
cùng một chỗ với ranh giới giữa các hệ thống song song và phân tán (bộ nhớ chia
sẻ so với truyền tin).
Các biện pháp phức tạp
Trong các thuật toán song song, một tài nguyên khác ngoài thời gian và không gian
là số lượng máy tính. Thật vậy, thường có sự đánh đổi giữa thời gian chạy và số
lượng máy tính: vấn đề có thể được giải quyết nhanh hơn nếu có nhiều máy tính
chạy song song (xem tăng tốc ). Nếu một vấn đề quyết định có thể được giải quyết
trong thời gian đa bội bằng cách sử dụng số lượng bộ xử lý đa thức, thì vấn đề
được cho là thuộc lớp NC. Lớp NC có thể được định nghĩa tốt như nhau bằng cách
sử dụng hình thức PRAM hoặc mạch Boolean Máy PRAM có thể mô phỏng các
mạch Boolean một cách hiệu quả và ngược lại.
Trong phân tích các thuật toán phân tán, thường chú ý nhiều hơn đến các hoạt động
truyền thông hơn là các bước tính toán. Có lẽ mô hình đơn giản nhất của điện toán
phân tán là một hệ thống đồng bộ nơi tất cả các nút hoạt động theo kiểu khóa. Mô
hình này thường được gọi là mô hình địa phương. Trong mỗi vòng liên lạc , tất cả
các nút song song (1) nhận được tin nhắn mới nhất từ hàng xóm của họ, (2) thực
hiện tính toán cục bộ tùy ý và (3) gửi tin nhắn mới cho hàng xóm. Trong các hệ
thống như vậy, một thước đo độ phức tạp trung tâm là số vòng truyền thông đồng
bộ cần thiết để hoàn thành nhiệm vụ.
Biện pháp phức tạp này có liên quan chặt chẽ với đường kính của mạng. Gọi D là
đường kính của mạng. Một mặt, mọi vấn đề có thể tính toán đều có thể được giải
quyết một cách tầm thường trong một hệ thống phân tán đồng bộ trong các vòng
giao tiếp khoảng 2 D: chỉ cần thu thập tất cả thông tin trong một vị trí (vòng D),
giải quyết vấn đề và thông báo cho từng nút về giải pháp (vòng D).

20


Mặt khác, nếu thời gian chạy của thuật toán nhỏ hơn nhiều vòng truyền thông D ,
thì các nút trong mạng phải tạo đầu ra của chúng mà không có khả năng thu được
thông tin về các phần xa của mạng. Nói cách khác, các nút phải đưa ra quyết định
thống nhất toàn cầu dựa trên thông tin có sẵn trong vùng lân cận D địa phương của
họ . Nhiều thuật toán phân tán được biết đến với thời gian chạy nhỏ hơn nhiều so
với vòng D và hiểu được vấn đề nào có thể giải quyết bằng các thuật toán đó là
một trong những câu hỏi nghiên cứu chính của lĩnh vực này. Thông thường, một
thuật toán giải quyết vấn đề về thời gian đa bội trong kích thước mạng được coi là
hiệu quả trong mô hình này.
Một biện pháp khác thường được sử dụng là tổng số bit được truyền trong mạng
(xem độ phức tạp trong giao tiếp) . Các tính năng của khái niệm này thường được
ghi lại bằng mô hình CONGEST (B), được định nghĩa tương tự như mô hình
LOCAL nhưng trong đó các thông điệp duy nhất chỉ có thể chứa các bit B.
Thuộc tính của hệ thống phân tán
Cho đến nay, trọng tâm là thiết kế một hệ thống phân tán giải quyết một vấn đề
nhất định. Một vấn đề nghiên cứu bổ sung là nghiên cứu các thuộc tính của một hệ
thống phân tán nhất định.
Các vấn đề ngăn chặn là một ví dụ tương tự từ các lĩnh vực tính toán tập trung:
chúng ta đưa ra một chương trình máy tính và công việc là quyết định xem nó tạm
dừng hoặc chạy mãi mãi. Vấn đề tạm dừng là không thể giải quyết được trong
trường hợp chung và hiểu một cách tự nhiên hành vi của mạng máy tính ít nhất
cũng khó như hiểu hành vi của một máy tính.
Tuy nhiên, có nhiều trường hợp đặc biệt thú vị có thể quyết định. Cụ thể, có thể
suy luận về hành vi của một mạng lưới các máy trạng thái hữu hạn. Một ví dụ là
cho biết liệu một mạng lưới trạng thái hữu hạn tương tác (không đồng bộ và không
xác định) có thể đạt đến bế tắc hay không. Vấn đề này đã hoàn tất PSPACE, có thể
quyết định được, nhưng không có khả năng có một thuật toán hiệu quả (tập trung,
song song hoặc phân tán) để giải quyết vấn đề trong trường hợp mạng lớn.

21


22


Danh mục các tài liệu tham khảo:
- https://en.wikipedia.org
- https://whatis.techtarget.com/definition/distributed-computing
- https://www.outsystems.com/blog/what-is-visual-programming.html
- https://www.quora.com/What-is-the-imperative-programming-paradigm
- Một số hình ảnh tìm kiếm trên Google hình ảnh.

23



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×

×