Threading là một khái niệm quan trọng trong phát
triển phần mềm, hỗ trợ thực hiện nhiều tác vụ tại cùng một thời điểm.
Hầu hết các tác vụ đều có thời gian chết (downtime),
với threading, ta có thể cho bộ xử lý tiếp tục thực với threading, ta có thể cho bộ xử lý tiếp tục thực
hiện công việc trong suốt thời gian đó.
• Lớp Thread được dùng để tạo và thực thi các tiến
trình.
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...MasterCode.vn
Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái niệm đa hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Mục tiêu bài học
Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái niệm đa hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#MasterCode.vn
Collections
Thao tác vớicác đối tượng danhsách tuần tự
Dictionaries
Các collection chuyên biệt hóa (Specialized Collections)
Generic
Generic Collections
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTMasterCode.vn
Tìm hiểu 3 cấu trúc dữ liệu đặc biệt: Ngăn xếp (Stack),
Hàng đợi (Queue) và Cây (Tree):
Khái niệm
Cách cài đặt trong VB.Net
Các thao tác cơ bản trên các cấu trúc dữ liệu
Bài 1 - Làm quen với C# - Lập trình winformMasterCode.vn
Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Mục tiêu bài học
Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Bài 2: Lập trình hướng đối tượng & Collection - Lập trình winform - Giáo trìn...MasterCode.vn
Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái niệm đa hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Mục tiêu bài học
Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái niệm đa hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Bài 8 - Collection Generics - Nền tảng lập trình ứng dụng với C#MasterCode.vn
Collections
Thao tác vớicác đối tượng danhsách tuần tự
Dictionaries
Các collection chuyên biệt hóa (Specialized Collections)
Generic
Generic Collections
Bài 6: Các cấu trúc dữ liệu đặc biệt: ngăn xếp, hàng đợi, cây - Giáo trình FPTMasterCode.vn
Tìm hiểu 3 cấu trúc dữ liệu đặc biệt: Ngăn xếp (Stack),
Hàng đợi (Queue) và Cây (Tree):
Khái niệm
Cách cài đặt trong VB.Net
Các thao tác cơ bản trên các cấu trúc dữ liệu
Bài 1 - Làm quen với C# - Lập trình winformMasterCode.vn
Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Mục tiêu bài học
Giới thiệu về .NET và Visual Studio
Giới thiệu về các kiến thức lập trình cơ bản trên ngôn ngữ C#
Kiểu dữ liệu
Toán tử
Thao tác với chuỗi
Cấu trúc điều khiển
Phương thức
Xử lý ngoại lệ
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTMasterCode.vn
Tìm hiểu khái niệm cấu trúc dữ liệu
Dữ liệu, Cấu trúc dữ liệu
Các kiểu cấu trúc dữ liệu
Tìm hiểu khái niệm giải thuật (thuật toán, thuật giải)
Khái niệm về giải thuật
Biểu diễn giải thuật
Độ phức tạp của giải thuật
Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
Lập trình sáng tạo bao gồm việc sáng tạo. Khoa học máy tính và các ngành liên quan tới tính toán đã từ lâu đƣợc giới thiệu tới những ngƣời trẻ tuổi một cách rời rạc – quá nhấn mạnh kĩ thuật so với khả năng sáng tạo. Lập trình sáng tạo giúp cho sự phát triển của cá nhân đối với tính toán trở nên tốt hơn, bằng cách hỗ trợ vẽ vời dựa trên sáng tạo, tƣởng tƣợng, và sở thích.
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTMasterCode.vn
Tìm hiểu khái niệm cấu trúc dữ liệu
Dữ liệu, Cấu trúc dữ liệu
Các kiểu cấu trúc dữ liệu
Tìm hiểu khái niệm giải thuật (thuật toán, thuật giải)
Khái niệm về giải thuật
Biểu diễn giải thuật
Độ phức tạp của giải thuật
Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
Lập trình sáng tạo bao gồm việc sáng tạo. Khoa học máy tính và các ngành liên quan tới tính toán đã từ lâu đƣợc giới thiệu tới những ngƣời trẻ tuổi một cách rời rạc – quá nhấn mạnh kĩ thuật so với khả năng sáng tạo. Lập trình sáng tạo giúp cho sự phát triển của cá nhân đối với tính toán trở nên tốt hơn, bằng cách hỗ trợ vẽ vời dựa trên sáng tạo, tƣởng tƣợng, và sở thích.
Vietnamese version translated from this famous slide
http://www.slideshare.net/nbykmatsui/ss-55961899?utm_content=buffer50ae1&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer
Similar to Bài 10 - Threading - Nền tảng lập trình ứng dụng với C# (14)
Dù bạn là ai, dù mục đích học tiếng Anh của bạn đơn thuần chỉ là có tấm bằng trong tay để xin việc hay cao siêu hơn là có thể nói thông viết thạo thì việc nằm lòng các ngữ pháp tiếng Anh ẩn chứa sức mạnh ghê gớm dưới đây cũng là bước cơ bản giúp bạn master tiếng Anh
Scalability and optimization are constant
concerns for the developer and operations
manager. The Performance Zone focuses on
all things performance, covering everything
from database optimization to garbage
collection, tool and technique comparisons,
and tweaks to keep your code as effcient
as possible.
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnMasterCode.vn
Các doanh nghiệp cần luôn có mặt trên online để khách hàng dễ dàng thấy họ mỗi khi tìm kiếm. "Mùa vụ" hay giai đoạn mà lượng
tìm kiếm về sản phẩm dịch vụ của doanh nghiệp trên Google bỗng gia tăng chính là thời điểm tuyệt vời để tận dụng.Các doanh nghiệp
có thể tối đa hoá doanh thu trong thời kì cao điểm này bằng cách lên chiến lược quảng cáo "luôn online" gắn liền với mục tiêu mùa.
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnMasterCode.vn
Meta Tag là thẻ dùng để cung cấp các thông tin về website một cách tóm gọn đối với các trình duyệt lẫn người dùng hay bot từ các search engine. Mọi người hay nghe Meta Keyword, Meta Description, Meta Page title,..
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnMasterCode.vn
Google Webmaster Tools • Google Analytics phân tích traffic • SEO Power Suite , web auditor đ onpage • Ahrefs, phân tích t khóa và Link • OpenSiteExplorer phân tích link profile • Firexfox Extensions: SEO Doctor cho onpage, NoDofollow • SEOMoz Toolbar đ check PA và DA •Free Monitor for Google đ check RANK •SEOMOZ pro check onpage
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnMasterCode.vn
Cơ chế hoạt động Google Tên miền Cấu trúc website Meta Tag (Title, Description, H1-H6, ALT...) URL thân thiện, Sitemap, robots.txt Keyword Density Tốc độ tải trang
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Những chú ý đặc biệt khi hỗ trợ người dùng máy tính xách tay Cài đặt, cấu hình, tối ưu, sửa chữa các thiết bị ngoại vi hay dùng với máy tính xách tay Nâng cấp, thay thế các thiết bị máy tính xách tay Nguyên lý hoạt động của máy in Cài đặt máy in
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Tìm hiểu các quy trình xử lý đảm bảo an toàn Tìm hiểu phương pháp bảo trì phòng ngừa cho máy tính cá nhân Tìm hiểu cách phát hiện và xử lý sự cố máy tính
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Đưa ra kế hoạch bảo trì phòng ngừa Rà soát các thiết lập Windows trọng yếu Làm sạch ổ cứng Chống phân mảnh ổ đĩa Kiểm tra lỗi ổ cứng Rà soát các chương trình khởi động và dịch vụ Tiến hành các thủ tục sao lưu Lập kế hoạch khắc phục thảm họa Sao lưu dữ liệu người dùng / toàn bộ ổ cứng Tối ưu Windows Các công cụ tối ưu: Task Manager, MSConfig, Services Console, Computer Management Cải thiện hiệu năng Windows Đưa ra kế hoạch bảo trì phòng ngừa Rà soát các thiết lập Windows trọng yếu Làm sạch ổ cứng Chống phân mảnh ổ đĩa Kiểm tra lỗi ổ cứng Rà soát các chương trình khởi động và dịch vụ Tiến hành các thủ tục sao lưu Lập kế hoạch khắc phục thảm họa Sao lưu dữ liệu người dùng / toàn bộ ổ cứng Tối ưu Windows Các công cụ tối ưu: Task Manager, MSConfig, Services Console, Computer Management Cải thiện hiệu năng Windows
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Biết được các công nghệ chế tạo ổ cứng Hiểu được cấu tạo ổ cứng Phân biệt rõ các chuẩn giao tiếp giữa hệ thống với ổ cứng Thông hiểu cách tổ chức lưu trữ dữ liệu trong ổ cứng Giải quyết các vấn đề liên quan đến ổ cứng Biết được các công nghệ chế tạo ổ cứng Hiểu được cấu tạo ổ cứng Phân biệt rõ các chuẩn giao tiếp giữa hệ thống với ổ cứng Thông hiểu cách tổ chức lưu trữ dữ liệu trong ổ cứng Giải quyết các vấn đề liên quan đến ổ cứng
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Nhận biết được đặc điểm và thông số kỹ thuật của các CPU dùng cho máy tính cá nhân Thông hiểu cách lựa chọn CPU cho hệ thống Thông hiểu cách lắp mới và thay thế CPU Thông hiểu các phương pháp tản nhiệt cho CPU Thông hiểu các loại RAM khác nhau và nguyên lý hoạt động của chúng. Thông hiểu các vấn đề cần thiết khi nâng cấp RAM
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
Nhắc lại các khái niệm cơ bản về phần cứng và phần mềm. Giới thiệu về các thành phần của máy tính. Nắm được vị trí sắp xếp của các thành phần bên trong case, các loại case khác nhau. Nắm được các thông số về nguồn điện được sử dụng để vận hành hệ thống máy tính. Ước lượng công suất của hệ thống và chọn bộ cấp nguồn và thiết bị lưu điện cho phù hợp. Nhận biết và xử lý một số vấn đề thường gặp liên quan đến nguồn điện
Pdf bai 6 làm việc với truy vấn cơ bản-slide 06-quan tri csdl voi access-mast...MasterCode.vn
Tìm hiểu các cách tạo truy vấn. Thực hiện truy vấn trên nhiều bảng. Tìm hiểu các khái niệm trong biểu thức tiêu chuẩn. Tìm hiểu cách xây dựng biểu thức tiểu chuẩn
Pdf bai 6 làm việc với truy vấn cơ bản-slide 06-quan tri csdl voi access-mast...
Bài 10 - Threading - Nền tảng lập trình ứng dụng với C#
1. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
1
2. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 10: Threading
• Khai báo và khởi tạo tiến trình
• Lậ t ì h khô đồ bộ• Lập trình không đồng bộ
2
3. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Threading
• Threading là một khái niệm quan trọng trong phát
triển phần mềm, hỗ trợ thực hiện nhiều tác vụ tại
ù ột thời điểcùng một thời điểm.
• Hầu hết các tác vụ đều có thời gian chết (downtime),
với threading, ta có thể cho bộ xử lý tiếp tục thựcvới threading, ta có thể cho bộ xử lý tiếp tục thực
hiện công việc trong suốt thời gian đó.
• Lớp Thread được dùng để tạo và thực thi các tiến
trình.
3
4. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thuộc tính và phương thức của tiến trình
ế• Các thao tác trên tiến trình
4
5. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thuộc tính và phương thức của tiến trình• Các thuộc tính và phương thức của tiến trình
− Các thuộc tính
• IsAlive• IsAlive
• IsBackground
• IsThreadPoolThread
• ManagedThread
• Name
• Priority
• ThreadState
5
6. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thuộc tính và phương thức của tiến trình
− Các thuộc tính tĩnh (static properties)Các thuộc tính tĩnh (static properties)
• CurrentContext
• CurrentPrincipalp
• CurrentThread
6
7. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thuộc tính và phương thức của tiến trình
− Các phương thứcCác phương thức
• Abort
• Interrupp
• Join
• Resume
• Start
• Suspend
7
8. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thuộc tính và phương thức của tiến trình• Các thuộc tính và phương thức của tiến trình
− Các phương thức tĩnh (static methods)
• BeginCriticalRegion• BeginCriticalRegion
• EndCriticalRegion
• GetDomainGet o a
• GetDomainID
• ResetAbort
• Sleep
• SpinWait
• V l til R d
8
• VolatileRead
• VolatileWrite
9. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Các thao tác trên tiến trình
− Khởi tạo tiến trìnhKhởi tạo tiến trình
− Thực thi tiến trình
− Ghép nối các tiến trình− Ghép nối các tiến trình
− Tạm dừng và hủy bỏ vĩnh viễn
9
10. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Khởi tạo tiến trình
− Trong NET Framework namespaceTrong .NET Framework, namespace
System.Threading chứa các kiểu được dùng để tạo
và quản lý đa tiến trình trong ứng dụng
ế− Khởi tạo tiến trình:
• Tạo phương thức không tham số, không kiểu dữ liệu trả
vềvề
• Tạo ủy nhiệm hàm ThreadStart với phương thức vừa tạo
• Tạo Thread mới với ủy nhiệm hàm ThreadStart vừa tạo
10
11. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Thực thi tiến trình
− Tiến trình được khởi tạo sẽ không tự động thực thiTiến trình được khởi tạo sẽ không tự động thực thi.
− Gọi phương thức Start để thực thi tiến trình
11
12. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
D khởi à• Demo khởi tạo và
thực thi tiến trình:
• T ột h
Static void SimpleWork(){
Console.WriteLine(“Thread: {0}
• Tạo một phương
thức không tham số,
không trả về dữ liệu.
”,Thread.CurrentThread.Manag
edThreadID);
}
• Tạo ủy nhiệm
ThreadStart
• T Th d ới
ThreadStart op=new
ThreadStart(SimpleWork);
Th d Th d Th d( )• Tạo Thread mới
• Gọi phương thức
Start để thực thi tiến
Thread myThread=new Thread(op);
myThread.Start();
12
Start để thực thi tiến
trình mới.
13. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
ế• Thực thi đa tiến trình
− Điểm mạnh của Thread là hỗ trợ xử lý đa tiến trình tại
cùng 1 thời điểmcùng 1 thời điểm.
− Ta có thể sửa lại đoạn code trên để hỗ trợ xử lý đa tiến
trình như sau:
ThreadStart op=new TharedStart();
for (int i=0;i<5;i++){
Thread myThread=new Thread(op);
myThread.Start();
}
13
}
14. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Ghép nối các tiến trình• Ghép nối các tiến trình
− Khi khối lượng công
việc và thời gian xử lý
ThreadStart op=new
ThreadStart(SimpleWork);
Thread[] myThreads=new Thread[5];
việc và thời gian xử lý
của mỗi tiến trình tăng,
ta sẽ cần tiến trình for (int i=0;i<5;i++){
chính (main thread) chờ
cho đến khi xử lý của
tiến trình đ ợc hoàn tất
myThreads[i]=new Thread(op);
myThreads[i].Start();
}tiến trình được hoàn tất
thông qua sử dụng
phương thức
}
foreach (Thread t in myThreads){
t.Join();
14
p g
Thread.Join().
();
}
15. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Threading priority
− Hỗ trợ gán/ lấy độ ưu tiên của tiến trình thông qua enumg y g q
ThreadingPriority.
− Các giá trị của ThreadingPriority
• HighestHighest
• AboveNormal
• Normal
• BelowNormal
• Lowest
− Thường sử dụng giá trị default là Normal
15
Thường sử dụng giá trị default là Normal
− Cân nhắc khi thay đổi độ ưu tiên của tiến trình
16. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Tạm dừng và loại bỏ vĩnh viễnTạm dừng và loại bỏ vĩnh viễn
− .NET framework tự động dừng và giải phóng tiến trình khi xử
lý hoàn tất.
− Dùng phương thức Thread.Abort() để dừng tiến trình khi có
nhu cầu.
Thread myThread=new Thread(new ThreadStart(AbortThisThread));
myHtread.Start();
myThread.Abort();
static void AbortThisThread(){
Có an
toàn
không ?static void AbortThisThread(){
SomeClass.IsValid=true;
SomeClase.IsComplete=true;
không ?
16
SomeClass.WriteToConsole();
}
17. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• Tạm dừng và loại bỏ vĩnh viễn
− Dừng tiến trình một cách an toàn : tạo lập critical region vớig p g
BeginCriticalRegion và EndReticalRegion.
static void AbortThisThread(){
Thread.BeginCriticalRegion();
SomeClass.IsValid=true;
SomeClase.IsComplete=true;
Critical
Region
SomeClase.IsComplete true;
Thread.EndCriticalRegion();
SomeClass.WriteToConsole();
17
}
18. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo và khởi tạo tiến trình
• T dừ à l i bỏ ĩ h iễ
Không dùng
• Tạm dừng và loại bỏ vĩnh viễn
− So sánh giữa có sử dụng và không sử dụng critical region
E
Không dùng
critical
region
Start Do work More work
Even
more work
Done
Thread abort Aborted
Even
dùng critical
region
Start Do work More work
Even
more work
Done
18
Thread abort Aborted
19. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Hỗ trợ từng phần của chương trình được thực thi
trên nhiều tiến trình riêng biệt, tương tự mô hình
A h P i M d l (APM)Asynchronous Programming Model (APM).
• .NET framework hỗ trợ APM qua nhiều lớp có cung
cấp phương thức BeginXXX và EndXXXcấp phương thức BeginXXX và EndXXX
• Ví dụ: lớp FileStream có phương thức Read đọc dữ
liệu từ stream, nó cũng cung cấp phương thức
ỗBeginRead và EndRead hỗ trợ mô hình APM.
19
20. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Ví d• Ví dụ:
byte[] buffer = new byte[100];
FileStream strm = new FileStream(“c:/aaa.txt”, FileMode.Open,( , p ,
FileAccess.Read, FileShare.Read, 1024, FileOptions.Asynchronous);
// gọi xử lý không đồng bộ
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);y g ( , , g , , );
// tiến hành xử lý khác trong khi chờ
// EndRead sẽ bị khóa cho đến khi xử lý không đồng bộ hoàn thành
int numBytes = strm EndRead(result);int numBytes = strm.EndRead(result);
strm.Close();
Console.WriteLine("Read {0}",numBytes);
20
Console.WriteLine(BitConverter.ToString(buffer));
21. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Cần có cách thực thi tác vụ không đồng bộ và biết khi
nào/ nơi nào sẽ gọi phương thức EndXXX.
• Rendezvous Model : có 3 cách mà APM sử dụng để
xử lý khi kết thúc lời gọi phương thức không đồng bộ
W it U til D− Wait-Until-Done
− Pooling
− CallbackCallback
21
22. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Wait-Until-Done Model:
− Cho phép bắt đầu lời gọi phương thức không đồng bộCho phép bắt đầu lời gọi phương thức không đồng bộ
và thực thi các tác vụ khác.
− Lời gọi kết thúc phương thức không đồng bộ sẽ bị lock
ế ố ấ
g p g g g
cho đến khi phương thức không đống bộ hoàn tất xử
lý.
22
23. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• P lli M d l• Polling Model
− Tương tự Wait-Until-Done, nhưng có thăm dò
IAsyncResult để biết xử lý đã hoàn tất chưaIAsyncResult để biết xử lý đã hoàn tất chưa
// gọi xử lý không đồng bộ
IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length, null, null);
// thăm dò xử lý hoàn tất chưa ?
While (!result.IsCompleted){
// xử lý khác khi chưa kết thúc lời gọi phương thức không đồng bộ// xử lý khác khi chưa kết thúc lời gọi phương thức không đồng bộ
Thread.Sleep(100);
}
// E dR d ẽ bị khó h đế khi ử lý khô đồ bộ h à thà h
23
// EndRead sẽ bị khóa cho đến khi xử lý không đồng bộ hoàn thành
int numBytes = strm.EndRead(result);
24. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• C llb k M d l• Callback Model
− Yêu cầu ta chỉ định phương thức callback và bất kỳ
trạng thái nào dùng trong phương thức callback đểtrạng thái nào dùng trong phương thức callback để
kết thúc lời gọi phương thức không đồng bộ.
static void TestCallbackAPM(){ static void CompleteRead(IAsyncResult r){
string filename=“…”;
FileStream strm=new ….;
// thực hiện lời gọi không đồng bộ
Console.WriteLine(“Read
Completed”);
FileStream strm=(FileStream)
r AsyncState;
IAsyncResult
result=strm.BeginRead(buffer,0,buf
fer.Length,new
AsyncCallBack(CompleteRead),str
r.AsyncState;
int numBytes=strm.EndRead(r);
strm.Close();
C l W it Li ( )
24
AsyncCallBack(CompleteRead),str
m);
}
Console.WriteLine(…..);
}
25. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Ngoại lệ và APM• Ngoại lệ và APM
− Khi dùng APM, các tác vụ có thể phát sinh các ngoại
lệ trong quá trình xử lýlệ trong quá trình xử lý
− Các ngoại lệ thường phát sinh trong quá trình gọi
phương thức EndXXX.
int numBytes=0;
try{
numBytes=strm EndRead(result);numBytes=strm.EndRead(result);
}
Catch (IOException){
25
Console.WriteLine(“An IO Exception occurred”);
}
26. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• ThreadPool
• Timer• Timer
26
27. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• ThreadPool
− Trong nhiều trường hợp tạo tiến trình riêng để thực thiTrong nhiều trường hợp, tạo tiến trình riêng để thực thi
những xử lý không đồng bộ là không cần thiết
− .NET hỗ trợ các built-in thread pool có thể dùng trong
ề ể ầ ế
p g g
nhiều trường hợp mà ta sẽ có thể cần phải tạo tiến
trình xử lý của riêng mình.
Các đặc điểm− Các đặc điểm
• ThreadPool thực thi nhanh
• Điều khiển số luồng thực thi tại cùng 1 thời điểm
27
Điều khiển số luồng thực thi tại cùng 1 thời điểm
28. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Sử dụng ThreadPoolSử dụng ThreadPool
− Dùng phương thức QueueUserWorkItem của ThreadPool
để tạo và điều khiển các tiến trình
static void WorkWithParameter(object o){
for (int i=0;i<10;i++){
Console.WriteLine(“{0}:Console.WriteLine( {0}:
{1}”,o.ToString(),Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10);
}}
}
WaitCallback workItem=new WaitCallback(WorkWithParameter);
if (ThreadPool QueueUserWorkItem(workItem ”ThreadPooled”);
28
if (ThreadPool.QueueUserWorkItem(workItem,”ThreadPooled”);
Console.WriteLine(“Could not queue item”);
29. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Giới hạn số tiến trình trong ThreadPool
− ThreadPool cho phép chỉ định số lượng tiến trình tốiThreadPool cho phép chỉ định số lượng tiến trình tối
đa và tối thiểu
− 2 trường hợp cần thay đổi số lượng tiến trình:g p y g
• Starvation
• Startup thread speed
− Thay đổi chỉ ảnh hưởng đến tiến trình hiện hành
29
30. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Giới hạn số tiến trình trong ThreadPool
− Starvation : xảy ra khi ứng dụng có quá nhiều tiến
ủtrình, vượt quá giới hạn của ThreadPool.
• Dùng phương thức ThreadPool.SetMaxThreads để thay
đổi số lượng tiến trình giới hạn.ợ g g ạ
int threads;
int completionPorts;int completionPorts;
ThreadPool.GetMaxThreads(out threads,out completionPorts);
ThreadPool.SetMaxThreads(threads+10,completionPorts+100);
30
31. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
• Timer
− Lớp Timer hỗ trợ thực thi một phương thức được thamLớp Timer hỗ trợ thực thi một phương thức được tham
chiếu bởi ủy nhiệm TimerCallback tại một/ nhiều thời
điểm xác định một cách không đồng bộ.
ế− Phương thức được tham chiếu được thực thi như một
tiến trình trong ThreadPool.
31
32. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lập trình không đồng bộ
T Ti khởi độ h thứ
• Sử dụng Timer
− Khai báo Timer chỉ định
Tạo Timer khởi động phương thức
TimerTick mỗi giây, khởi động
ngay lập tức :
Khai báo Timer, chỉ định
một phương thức cho ủy
nhiệm TimerCallback thực
thi khi khởi động Timer
static void TimerTick(object o){
Console.WriteLine(“Tick :
{0}”,DateTime.Now.ToLongTim
thi khi khởi động Timer.
− Các giá trị có thể thay đổi:
• Thời gian chờ đến khi
{ } , g
eString());
}
TimerCallback tc=newThời gian chờ đến khi
khởi động Timer.
• Khoảng thời gian giữa các
lần khởi động
TimerCallback tc=new
TimerCallback(TimerTick);
Timer tm=new Timer(tc ,nothing ,
0 1000 )
32
lần khởi động. 0 ,1000 );
33. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
End
Thanks
33