Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
260,81 KB
Nội dung
1 Chương 9: Lập trình MultiThreadChương 9: Lập trình MultiThread GVLT: Trần Anh Dũng 2 Nội dungNội dung Giới thiệu ða nhiệm và ña tuyến Tạo lập và sử dụng tuyến Lớp Thread Giao tiếp Runnable ðồng bộ hóa các tuyến Tuyến ma Nhóm tuyến Bài tập 3 Giới thiệu (1)Giới thiệu (1) Hệ ñiều hành ña nhiệm cổ ñiển: ðơn vị cơ bản sử dụng CPU là process. Process là một ñoạn chương trình ñộc lập ñã ñược nạp vào bộ nhớ. Mỗi process thi hành một ứng dụng riêng, có một không gian ñịa chỉ và một không gian trạng thái riêng. Các process liên lạc với nhau thông qua hệ ñiều hành, tập tin, mạng. 4 Giới thiệu (2)Giới thiệu (2) Hệ ñiều hành ña nhiệm hiện ñại, hỗ trợ Thread: ðơn vị cơ bản sử dụng CPU là thread. Thread một ñoạn các câu lệnh ñược thi hành. Mỗi process có một không gian ñịa chỉ và nhiều thread ñiều khiển. Mỗi thread có bộ ñếm chương trình, trạng thái các thanh ghi và ngăn xếp riêng. 5 ða nhiệm (1)ða nhiệm (1) ða nhiệm – Multitasking: Là kỹ thuật cho phép nhiều công việc ñược thực hiện cùng một lúc trên máy tính. Nếu có nhiều CPU, các công việc có thể ñược thực hiện song song trên từng CPU. Trong trường hợp nhiều công việc cùng chia sẻ một CPU, từng phần của mỗi công việc sẽ ñược CPU thực hiện xen kẽ. 6 Hai kỹ thuật ña nhiệm cơ bản: ða tiến trình (Process-based multitasking): Nhiều chương trình chạy ñồng thời. Mỗi chương trình có một vùng dữ liệu ñộc lập. ða tuyến (Thread-based multitasking): Một chương trình có nhiều tuyến cùng chạy ñồng thời. Các tuyến dùng chung vùng dữ liệu của chương trình. ða nhiệm (2)ða nhiệm (2) 7 Tuyến và ña tuyến Tuyến và ña tuyến Tuyến là mạch thi hành ñộc lập của một tác vụ trong chương trình. Một chương trình có nhiều tuyến thực hiện cùng lúc gọi là ña tuyến. 8 Thread Thread Một thread có thể là một trong bốn trạng thái sau: Running: Một thread ñang ñược thực thi. Suspended: Việc thực thi bị tạm dừng và có thể phục hồi tại thời ñiểm dừng Blocked: Một tài nguyên không thể ñược truy cập bởi vì nó ñang ñược sử dụng bởi một thread khác. Terminated: Việc thực thi bị ngừng hẳn và không thể phục hồi. 9 MultithreadMultithread Là khả năng làm việc với nhiều thread (Multithread) Chuyên sử dụng cho việc thực thi nhiều công việc ñồng thời Giảm thời gian rỗi của hệ thống ñến mức thấp nhất. Main Thread Thread A Thread B Thread C start start start Các thread có thể chuyển ñổi dữ liệu với nhau 10 Vòng ñời của ThreadVòng ñời của Thread runnable scheduler new dead running blocked new start terminate IO, sleep, wait, join yield, time slice notify, notifyAll, IO complete, sleep expired, join complete [...]... Có th t o ra các nhóm tuy n là nhóm con c a m t nhóm tuy n khác Nhóm tuy n ñ c bi t: System, main 31 Bài t p 1 Vi t chương trình t o 2 tuy n: m t tuy n tìm ki m các s nguyên t t 1000 ñ n 1000000 và m t tuy n tính t ng giá tr c a các s nguyên t tìm ñư c Chú ý ñ ng b tuy n 2 Vi t chương trình t o m ng có 1000000 ph n t , sau ñó t o 2 tuy n ñ s p x p 2 n a m ng, cu i cùng ghép 2 m ng ñã s p x p So sánh... ph i t m d ng ñ cho các tuy n khác cùng ñ ưu tiên dùng CPU Các tuy n cùng ñ ưu tiên luân phiên s d ng CPU theo ki u xoay vòng (round-robin) 21 B l p l ch (2) 22 ð ng b hóa tuy n (1) Các tuy n trong chương trình cùng truy c p vào m t ñ i tư ng có th ñem l i k t qu không như mong mu n Ví d : Tuy n A c p nh t ñ i tư ng X, tuy n B ñ c d li u t X R t có th x y ra s c là tuy n B ñ c d li u chưa ñư c c p nh... bi t 27 Ví d khi không ñ ng b 28 Ví d khi có ñ ng b 29 Tuy n ma (daemon thread) Tuy n ma thư ng là tuy n h tr c a các tuy n khác môi trư ng th c thi Ví d : garbage collector c a Java là m t tuy n ma Chương trình k t thúc khi t t c các tuy n không ph i tuy n ma k t thúc Các phương th c v i tuy n ma: // ñ t tuy n tr thành tuy n ma void setDaemon(boolean isDaemon); // ki m tra tuy n có ph i tuy n ma không... isAlive() void yield() //như ng Thread +currentThread() : Thread +isInterrupted() : bool +sleep(in millis : long) : long +yield() +isAlive() +join() +interrupt() +start() +stop() 12 Main thread (1) M i chương trình Java có m t thread, th m chí n u b n không t o ra b t kỳ thread nào Thread này ñư c g i là main thread Main thread sinh ra các thread mà b n t o ra Nh ng thread ñó g i là child thread Main thread... Thread.sleep(100); } }catch (InterruptedException ie){ System.out.println("Thread " + threadName + " interrupted"); } System.out.println(threadName + " is exiting."); } } 18 Ví d ña tuy n (2) public class DemoMultiThread{ public static void main(String[] args){ new MyThread("TheFirstThread"); new MyThread("TheSecondThread"); try{ for(int i=0;i . 1 Chương 9: Lập trình MultiThreadChương 9: Lập trình MultiThread GVLT: Trần Anh Dũng 2 Nội dungNội dung Giới thiệu ða nhiệm và ña tuyến Tạo lập và sử dụng tuyến Lớp. bản: ða tiến trình (Process-based multitasking): Nhiều chương trình chạy ñồng thời. Mỗi chương trình có một vùng dữ liệu ñộc lập. ða tuyến (Thread-based multitasking): Một chương trình có nhiều. vùng dữ liệu của chương trình. ða nhiệm (2)ða nhiệm (2) 7 Tuyến và ña tuyến Tuyến và ña tuyến Tuyến là mạch thi hành ñộc lập của một tác vụ trong chương trình. Một chương trình có nhiều tuyến