Bài giảng Lập trình đồng thời và phân tán: Bài 1 - Lê Nguyễn Tuấn Thành

28 88 1
Bài giảng Lập trình đồng thời và phân tán: Bài 1 - Lê Nguyễn Tuấn Thành

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình đồng thời và phân tán - Bài 1: Những kiên thức cơ sở do Lê Nguyễn Tuấn Thành biên soạn có cấu trúc gồm 2 phần cung cấp cho người học các kiến thức: Thuật ngữ, luồng trong java. Mời các bạn cùng tham khảo nội dung chi tiết.

LẬP TRÌNH ĐỒNG THỜI & PHÂN TÁN BÀI 1: NHỮNG KIẾN THỨC CƠ SỞ Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn NỘI DUNG Thuật ngữ Luồng Java Bài giảng có sử dụng hình vẽ sách “Concurrent and Distributed Computing in Java, Vijay K Garg, University of Texas, John Wiley & Sons, 2005” Phần Thuật ngữ Thuật ngữ (1) ▪ Tính toán (sequential computing) ▪ Tại thời điểm thực tính tốn ▪ Chỉ có luồng điều khiển ▪ Hệ thống đơn nhiệm (single-tasking systems) ▪ Hệ thống đa nhiệm (multitasking systems) ▪ Time-slicing Tại phải tính tốn đồng thời / song song? Thuật ngữ (2) ▪ Tính tốn đồng thời / song song (concurrent / parallel computing): Mơ hình chia sẻ nhớ ▪ Tại thời điểm thực nhiều tính tốn ▪ Bao gồm nhiều “chương trình” chạy nhiều vi xử lý ▪ Giao tiếp với cách sử dụng nhớ chia sẻ ▪ Một “chương trình” ln biết trạng thái toàn cục toàn hệ thống Minh họa: Hệ thống song song Giả sử: người ≈ Processor ▪ Multitasking: ▪ bạn: vừa làm tập (LT+TH) môn CSE423, vừa nghe nhạc ▪ Concurrency: ▪ bạn: vừa đọc phần lý thuyết, vừa code phần thực hành ▪ Parallelism: ▪ bạn: bạn đọc phần lý thuyết, bạn code phần thực hành Thuật ngữ (3) ▪ Tính tốn phân tán (distributed computing) ▪ Hệ thống phân tán chứa nhiều xử lý kết nối với mạng truyền thông ▪ Các vi xử lý giao tiếp với cách gửi nhận thông điệp, thông qua kênh truyền thông (pipe, socket) ▪ Khơng có xử lý biết trạng thái toàn cục toàn hệ thống phân tán Minh họa: Hệ thống phân tán 10 Thách thức chương trình đồng thời Làm để đồng việc thực thi tiến trình/luồng khác cho phép chúng giao tiếp với ? 14 Interleaving ▪ Giả sử chương trình có luồng: Luồng P bao gồm câu lệnh p1, theo sau p2 Luồng Q bao gồm câu lệnh q1, theo sau q2 ▪ Hai luồng bắt đầu thực thi vị trí trỏ điều kiển (control pointer), lúc đầu trỏ tới p1 q1 ▪ Giả sử câu lệnh không thực việc chuyển điều khiển thực thi ▪ Các kịch xảy ??? p1 → q1 → p2 → q2 Interleaving p1 → q1 → q2 → p2 p1 → p2 → q1 → q2 q1 → p1 → q2 → p2 q1 → p1 → p2 → q2 q1 → q2 → p1 → p2 ▪ p2 → p1 → q1 → q2 có phải kịch khơng? ▪ KHƠNG ! ▪ Tơn trọng thực thi tiến trình 15 ▪ Do p2 khơng thể thực thi trước p1 ! Race condition Giá trị n p, q thực thi xong ? 16 17 Có hai chế để bảo vệ khối mã lệnh khỏi việc truy cập đồng thời • Từ khố synchronized 18 • Lớp ReentrantLock (từ Java SE 5.0) Concurrency is Hard to Test and Debug (1) ▪ It’s very hard to discover race conditions using testing ▪ Each time you run a program containing a race condition, you may get different behavior ! ▪ Interleaving of instructions or messages depends on the relative timing of events that are strongly influenced by the environment ▪ Delays can be caused by other running programs, other network traffic, operating system scheduling decisions, variations in processor clock speed, etc 19 Concurrency is Hard to Test and Debug (2) ▪ Two kinds of bugs: heisenbugs, which are nondeterministic and hard to reproduce, bohrbug, which shows up repeatedly whenever you look at it ▪ Almost all bugs in sequential programming are bohrbugs ▪ A heisenbug may even disappear when you try to look at it with println or debugger ! ▪ The reason is that printing and debugging are so much slower than other operations, often 100-1000x slower, that they dramatically change the timing of operations, and the interleaving 20 21 Phần Luồng Java Tạo luồng cách kế thừa lớp Thread 22 Tạo luồng cách cài đặt giao diện Runnable 23 Các trạng thái luồng Java 24 Cơ chế Join (1) ▪Cho phép luồng đợi luồng khác hoàn thành việc thực thi ▪Ví dụ: ▪ Viết chương trình sử dụng luồng Java để tính số Fibonacci thứ n (Fn) sử dụng công thức: Fn = Fn-1 + Fn-2 với n ≥ ▪ Các trường hợp sở: F0 = 1, F1 = 25 26 Cơ chế Join (2) Lập lịch trình luồng ▪ Nếu hai luồng chạy, luồng chọn để chạy hệ thống? ▪ Phụ thuộc vào độ ưu tiên sách lập lịch hệ thống ▪ Thay đổi độ ưu tiên luồng sử dụng setPriority lấy độ ưu tiên sử dụng getPriority ▪ MIN_PRIORITY (1), MAX_PRIORITY (10), NORM_PRIORITY (5): số nguyên định nghĩa lớp Thread ▪ Daemon thread: luồng chạy ngầm 27 Tài liệu tham khảo ▪ Concurrent and Distributed Computing in Java, Vijay K Garg, University of Texas, John Wiley & Sons, 2005 ▪ Tham khảo: ▪ Principles of Concurrent and Distributed Programming, M Ben-Ari, Second edition, 2006 ▪ Foundations of Multithreaded, Parallel, and Distributed Programming, Gregory R Andrews, University of Arizona, Addison-Wesley, 2000 ▪ The SR Programming Language: Concurrency in Practice, Benjamin/Cummings, 1993 ▪ Xử lý song song phân tán, Đoàn văn Ban, Nguyễn Mậu Hân, Nhà xuất Khoa học Kỹ thuật, 2009 28 ... thực thi ▪ Các kịch xảy ??? p1 → q1 → p2 → q2 Interleaving p1 → q1 → q2 → p2 p1 → p2 → q1 → q2 q1 → p1 → q2 → p2 q1 → p1 → p2 → q2 q1 → q2 → p1 → p2 ▪ p2 → p1 → q1 → q2 có phải kịch khơng? ▪ KHƠNG... thống phân tán Minh họa: Hệ thống phân tán 10 Thuật ngữ (4) Chương trình (program): tập lệnh ngơn ngữ lập trình ▪ Chương trình tuần tự: thực “tiến trình ▪ Chương trình đồng thời: nhiều “tiến trình ... 13 Thách thức chương trình đồng thời Làm để đồng việc thực thi tiến trình/ luồng khác cho phép chúng giao tiếp với ? 14 Interleaving ▪ Giả sử chương trình có luồng: Luồng P bao gồm câu lệnh p1,

Ngày đăng: 15/05/2020, 22:46

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan