Bài giảng Lập trình mạng: Chương 5 Sử dụng Thread, cung cấp cho người học những kiến thức như: Giới thiệu; Tạo Thread trong chương trình; Sử dụng Thread trong Server; Sử dụng Thread trong truyền và nhận dữ liệu; Thread Pool; Sử dụng Thread Pool trong server. Mời các bạn cùng tham khảo!
Chương Sử dụng Thread Mục lục chương Giới thiệu Tạo Thread chương trình Sử dụng Thread Server Sử dụng Thread truyền nhận liệu Thread Pool Sử dụng Thread Pool server Giới thiệu • Ở chương trước học cách sử dụng lớp socket không đồng để thực chức mức (background) • Có nghĩa chương trình tiếp tục chạy đợi hàm socket thực chức • Chương học cách sử dụng thread để thực chức Tạo thread chương trình • C# cung cấp namespace System.Threading • Trong có chứa lớp cho việc tạo điểu khiển thread chương trình Khái niệm thread • Thread định nghĩa luồng đơn chương trình • Khi chương trình thực CPU, thực qua thread thread kết thúc • Nếu chương trình có nhiều thread có nhiều luồng thực đồng thời Khái niệm thread • Tất thread tạo share không gian nhớ với thread (main thread) • Thơng thường thread thứ cấp tạo để thực tính tốn main thread tiếp tục thực chức chương trình Lớp Thread • Sử dụng lớp Thread để tạo đối tượng thread nhờ ta tạo thread process • Hàm tạo lớp Thread: – Thread(ThreadStart start) • Trong đó: ThreadStart ủy quyền đến phương thức thực bên thread Ví dụ tạo thread Thread newThread = new Thread(new ThreadStart(newMethod)); } void newMethod() { } Các phương thức lớp Thread Method Description Abort() Terminates the thread Equals() Determines whether two Thread objects are the same GetHashCode() Gets a unique representation for the thread GetType() Gets the type of the current thread Interrupt() Interrupts a thread that is in the Wait thread state Join() Blocks the calling thread until the thread terminates Resume() Resumes a thread that has been suspended Start() Causes the operating system to change the thread state to Running Suspend() Suspends the execution of the thread ToString() Gets a string representation of the Thread object Chạy thread • Sau thread tạo ra, ta phải gọi đến phương thức Start để bắt đầu chạy thread • Ví dụ chương trinh sử dụng Thread: ThreadSample.cs program 10 Sử dụng thread cho việc truyền nhận liệu • Cùng với hỗ trợ cho việc kết nối nhiều Client, thread sử dụng mà khơng có mơ hình giao thức rõ ràng sử dụng • Một vấn đề ví dụ trước biết Client Server biết xác chúng nhận truyền liệu 18 Sử dụng thread cho việc truyền nhận liệu • Tuy nhiên điều khơng ứng dụng thực tế • Chẳng hạn chương trình chat bên nhận khơng biết xác bên gửi gửi liệu 19 Sử dụng thread cho việc truyền nhận liệu • Để giải vấn đề ta cần sử dụng Thread cách tạo thread thứ cấp chuyên để xử lý việc gửi nhận liệu 20 Sơ đồ sử dụng thread cho chương trình chat 21 Ví dụ chương trình chat • Vi dụ: TcpChat.cs • Ví dụ vừa có chức Client vừa có chức Server 22 Ví dụ chương trình chat • Khi người sử dụng click vào nút lệnh Listen, socket tạo lắng nghe kết nối tới • Khi có kết nối tới, phương thức AcceptConn() tạo socket chuyển đến thread thứ cấp 23 Test chương trình chat • Để test chương trình chat ta cần có copy chạy đồng thời • Khi chạy chương trình ta chat • Sử dụng chương trinh ListThreads ta quan sát thấy thread tạo 24 Thread Pool • Việc tạo nhiều thread có kết nối đến làm chậm thời gian thực chương trình • Để khắc phục tình trạng ta dùng thread pool 25 Lớp ThreadPool • Lớp ThreadPool chứa System.Threading namespace • Lớp ThreadPool gán ủy thác tới threads thread pool • Tất phương thức lớp ThreadPool phương thức tĩnh, hàm tạo khơng sử dụng 26 Các phương thức lớp ThreadPool Method Description BindHandle() Binds an operating system handle to the thread pool GetAvailableThreads() Gets the number of worker threads available for use in the thread pool GetMaxThreads() Gets the maximum number of worker threads available in the thread pool QueueUserWorkItem() Queues a user delegate to the thread pool RegisterWaitForSingleObject() Registers a delegate waiting for a WaitHandle object UnsafeQueueUserWorkItem() Queues an unsafe user delegate to the thread pool but does not propagate the calling stack onto the worker thread UnsafeRegisterWaitForSingleObject() Registers an unsafe delegate waiting for a WaitHandle object 27 Đăng ký • Để đăng ký ủy quyền cho việc sử dụng thread thread pool ta dùng cú pháp sau: – ThreadPool.QueueUserWorkItem(new WaitCallback(Counter)); – Biến Counter ủy thác phương thức chạy thread 28 Ví dụ sử dụng ThreadPool • Ví dụ: ThreadPoolSample.cs • Test ví dụ threadpool 29 Sử dụng ThreadPool Server • Đối với server mà có client kết nối đến lúc (