Tiểu luận: Nguyên lý các Ngôn ngữ lập trình Đại học Bách Khoa Hà nội LẬP TRÌNH SONG SONG VÀ LẬP TRÌNH TƯƠNG TRANH TÌM HIỂU NGÔN NGỮ LẬP TRÌNH ERLANG Tính toán song song (Paralell 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 đó. 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 được gọi là lập trình song song. Lợi ích: Tiết kiệm thời gian (Xử lý đồng thời cùng một lúc) Giải quyết những bài toán lớn Tận dụng tài nguyên
Trang 1Tiểu luận: Nguyên lý các Ngôn ngữ lập trình
LẬP TRÌNH SONG SONG VÀ LẬP
TRÌNH TƯƠNG TRANH
TÌM HIỂU NGÔN NGỮ LẬP TRÌNH ERLANG
Giảng viên hướng dẫn: TS Phạm Đăng Hải
Trang 2NỘI DUNG TÌM HIỂU
TƯƠNG TRANH
Trang 3I CÁC KHÁI NIỆM
o 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 đó 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
được gọi là lập trình song song.
o Tiết kiệm thời gian (Xử lý đồng thời cùng một lúc)
o Giải quyết những bài toán lớn
o Tận dụng tài nguyên
Trang 4I CÁC KHÁI NIỆM
Trang 5II LẬP TRÌNH SONG SONG VÀ LẬP TRÌNH TƯƠNG TRANH
Song song là khi các nhiệm
vụ chạy cùng một lúc Ví
dụ nhiều nhiệm vụ chạy
cùng lúc trên một bộ xử lý
đa lõi.
Đồng thời là khi hai hoặc nhiều
nhiệm vụ chạy có thể bắt đầu ,
chạy và hoàn thành trong khoảng
thời gian chồng chéo Nó không
nhất thiết là tất cả đều được chạy
ngay lập tức Ví dụ đa nhiệm trên
một bộ xử lý đơn lõi.
Trang 6 “Concurrency is not Parallelism” - Rob Pike
o Concurrentcy Progamming
o Paralell Programming
TRÌNH TƯƠNG TRANH
Trang 7II LẬP TRÌNH SONG SONG VÀ LẬP TRÌNH TƯƠNG TRANH
Xem xét hai đơn vị thực hiện được bắt đầu cùng một lúc.
o Nếu chúng chạy song song, sau đó qua bất kỳ khoảng
thời gian nào trong quá trình thực thi, cả hai đều có thể được thực hiện cùng một lúc.
o Nếu chúng chạy tương tranh,
chúng có thể chạy song song,
hoặc chúng có thể được sắp xếp
theo thứ tự chỉ khi nào có tiến bộ
tại một thời điểm nào đó và việc
thực thi chúng được xen kẽ nhau.
Các hệ điều hành đa nhiệm đã khai thác điều này trong
nhiều năm.
Trang 8III NGÔN NGỮ LẬP TRÌNH ERLANG
Trang 9 Erlang là một ngôn ngữ cấp cao, được ra đời nhằm
mục đích xây dựng những ứng dụng chạy tốt bằng cách song song hóa các yêu cầu tính toán, hỗ trợ lập trình hàm (1985)
ngôn ngữ xây dựng theo hướng lập trình tương
tranh (Concurrency – Oriented)
hành
ứng dụng đám mây phổ biến như Riak, CouchDB, RabbitMQ, và thậm chí là LING unikernel
Trang 102 NGÔN NGỮ LẬP TRÌNH ERLANG
Cấu trúc của ngôn ngữ Erlang
Trang 112 HỆ THỐNG HỖ TRỢ LẬP TRÌNH
VỚI ERLANG
Ba chương trình thực thi phục vụ cho việc lập trình
được gọi là shell trong thư mục bin đó là:
erl.exe đây là shell để chạy trên dòng lệnh command
line của erlang
werl.exe đây là shell để chạy thông qua cửa sổ của
window
erlc.exe đây là shell biên dịch code Erlang thành các
file đã được biên dịch beam
Trang 122 HỆ THỐNG HỖ TRỢ LẬP TRÌNH
VỚI ERLANG
Viết code bằng module
functions mà chúng ta viết được chứa trong
modules, các modules được lưu trong các file có
phần mở rộng erl Modules cần được biên dịch
trước khi chạy Một file modules đã được biên dịch
sẽ có phần mở rộng là beam
Trang 133 HỆ THỐNG TỪ VỰNG CỦA
ERLANG
Các từ khóa: after and andalso band begin bnot
bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor
Trang 143 HỆ THỐNG TỪ VỰNG CỦA
ERLANG
Biến và các atom hợp lệ:
cái in hoa được coi là một biến, mỗi biến
được bắt đầu bằng _ là một biến có thể
đại diện cho bất kỳ giá trị nào (ta không quan tâm và không tác động đến biến dạng này)
coi như một atom, nếu muốn có atom
bắt đầu bằng chữ cái in hoa ta để trong dấu nháy đơn (‘’)
X Name1 PhoneNumber Phone_number _
_Height
hello phone_number Monday'
Trang 15Dấu « ; » là dấu thể hiện các vế của một câu lệnh.
Dấu % là một câu chú thích và sẽ không được dịch bởi Erlang compiler
Trang 164 NGỮ NGHĨA CƠ BẢN CỦA
ERLANG
dụng Erlang chỉ cho phép 1 biến số chỉ đuợc ràng buộc 1 lần
gạch dưới (_) và có thể được sử dụng khi một biến được sử dụng, nhưng giá trị của nó bị bỏ qua
Trang 174 NGỮ NGHĨA CƠ BẢN CỦA
Trang 185 ĐIỀU KHIỂN LUỒNG TRONG
Body1;
;
GuardSeqN ->
BodyN end
Trang 195 ĐIỀU KHIỂN LUỒNG TRONG
;
PatternN [when GuardSeqN] -> BodyN
end
Trang 205 ĐIỀU KHIỂN LUỒNG TRONG
ERLANG
Biểu thức (Expression)
o So sánh số hạng
Trang 215 ĐIỀU KHIỂN LUỒNG TRONG
Trang 225 ĐIỀU KHIỂN LUỒNG TRONG
Trang 235 ĐIỀU KHIỂN LUỒNG TRONG
Trang 245 ĐIỀU KHIỂN LUỒNG TRONG
ERLANG
Biểu thức (Expression)
o Operator Precedence – Ưu tiên toán tử
Khi thực hiện một biểu thức, toán tử với độ ưu tiên cao nhất sẽ được thực hiện trước Các toán tử với cũng độ ưu tiên được thực hiện theo quan hệ hệ của chúng Phép tính toán tử liên kết trái được thực hiện từ trái qua phải.
Trang 256 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
ngôn ngữ Erlang là các process
o Receive là các đáp ứng của một process khi
các message được chuyển đến
Trang 266 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
o Việc tạo và hủy process rất nhanh.
o Việc gửi các message giữa các process cũng xảy ra rất
nhanh.
o Các process như nhau khi thực hiện trên các hệ điều
hành khác nhau.
o Lượng process được tạo ra có thể rất lớn.
o Các process không có vùng bộ nhớ dùng chung, và
hoàn toàn độc lập.
o Cách duy nhất để các process liên lạc với nhau đó là
thực hiện thông qua truyền và nhận các message.
Trang 276 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
Pid2 = spawn(Mod, Fun, Args).
%Pid2 is only known to Pid1
Returns the pid registered under Name,
or undefined if the name is not registered.
Trang 286 LẬP TRÌNH TƯƠNG TRANH VỚI
Trang 296 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
From and Msg become bound
when the message is received (From = A, Msg = foo)
Selective message passing Wildcard message passing
Trang 306 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
Exception Handling với các Process
những thông tin này đến các process có quan hệ với
nó để các process có được những lý do của process
đã bị kết thúc do gặp lỗi
là link set (tập link) của process B
Trang 316 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
Giao tiếp với các ngôn ngữ khác
Giao tiếp giữa chương trình viết bằng Erlang và ngôn ngữ khác
Kênh giao tiếp hướng byte – byte-oriented communication channel
Trang 326 LẬP TRÌNH TƯƠNG TRANH VỚI
ERLANG
Giao tiếp với các ngôn ngữ khác
Cú pháp tạo ra một port như sau:
Port = open_port(PortNam, PortSettings)
Thông điệp có thể được gửi tới một port như sau:
Port ! {PidC, {command, Data}}
Gửi dữ liệu (danh sách vào ra) tới cổng này
Port ! {PidC, {connect, Pid1}
Thay đổi PID của process kết nối từ PidC tới Pid1.
Đóng port: Port ! {PidC, close}
Process có thể nhận được thông điệp từ chương trình ngoài như sau:
receive
{Port, {data, Data}} ->
Data comes from the external process
Trang 337 RELOAD MODULE
Reload module ngay khi chương trình đang chạy
Nghĩa là khi chương trình đang chạy, có thể sửa mã nguồn của module nào đó, dịch lại, rồi reload module vào trong chương trình => có thể cập nhật chương trình ngay khi nó đang chạy mà không cần khởi động lại
Để reload:
Gõ l(tên module)
Trang 34IV CÀI ĐẶT, TRIỂN KHAI
http://www.erlang.org/download.html và cài đặt
Trang 35IV CÀI ĐẶT, TRIỂN KHAI
o Để chạy, gõ lệnh erl (không có tham số->console)
erl -noshell -s simple main 20
o Để compile, gõ lệnh erlc (thêm +debug_info nếu
muốn debug), ví dụ: erlc +debug_info hello.erl
Trang 36V DEMO
Trang 37VI KẾT LUẬN
Erlang là ngôn ngữ lập trình tương tranh cho phép
thích ứng trên nhiều nền tảng khác nhau
các hệ thống phân tán
đa lõi, và SMP (đa xử lý)
Erlang được sử dụng nhiều trong telecom, để viết
các hệ thống lớn, soft real-time, có khả năng chịu lỗi cao
WhatsApp với hơn 50 triệu người dung