1. Trang chủ
  2. » Giáo án - Bài giảng

Lập trình đa tuyến (MULTITHREADING)

20 205 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 1,42 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình đa tuyến MULTITHREADINGMục tiêu : Kết thúc bài học SV có thể: • Nêu được khái niệm Tuyến Thread và tiến trình Process • Phân tích được những ưu điểm của lập trình đa tuyến • Tr

Trang 1

Lập trình đa tuyến (MULTITHREADING)

Biên tập bởi:

Khoa CNTT ĐHSP KT Hưng Yên

Trang 2

Lập trình đa tuyến (MULTITHREADING)

Biên tập bởi:

Khoa CNTT ĐHSP KT Hưng Yên

Các tác giả:

Khoa CNTT ĐHSP KT Hưng Yên

Phiên bản trực tuyến:

http://voer.edu.vn/c/bc908932

Trang 3

MỤC LỤC

1 Lập trình đa tuyến (MULTITHREADING)

Tham gia đóng góp

Trang 4

Lập trình đa tuyến (MULTITHREADING)

Mục tiêu :

Kết thúc bài học SV có thể:

• Nêu được khái niệm Tuyến (Thread) và tiến trình (Process)

• Phân tích được những ưu điểm của lập trình đa tuyến

• Trình bày được các phương thức của lớp Threading

• Vận dụng cơ chế đa tuyến, viết một số ứng dụng đơn giản

Nội dung:

Một số khái niệm

Đa nhiệm

– Mutitasking : Là khả năng của hệ điều hành làm nhiều công việc (ví dụ chạy nhiều ứng dụng) tại một thời điểm

Tiến trình

– Process : Khi chạy một ứng dụng, hệ điều hành sẽ cấp phát riêng cho ứng dụng đó bộ nhớ và các tài nguyên khác Bộ nhớ và tài nguyên vật lý riêng biệt này được gọi là một tiến trình Các tài nguyên và bộ nhớ của một tiến trình thì chỉ tiến trình đó được phép truy cập

Lưu ý Một ứng dụng thường có một tiến trình nhưng cũng có thể có nhiều tiến trình ! Tiến trình ≠ Ứng dụng

Tuyến (đoạn) – Thread :

Trong hệ thống, một tiến trình có thể có một hoặc nhiều chuỗi thực hiện tách biệt nhau

và có thể chạy đồng thời Mỗi chuỗi thực hiện này được gọi là một tuyến (Thread) Trong một ứng dụng, Thread khởi tạo đầu tiên gọi là Thread sơ cấp hay Thread chính (Chính là phương thức Sub Main)

Trang 5

Một hình ảnh khác về mô hình đơn tuyến và đa tuyến:

Có 2 mô hình thread là Apartment Threading và Free Threading

Trang 6

Free - threading

Trong mô hình thứ hai, do các thread có thể cùng chia sẻ và truy cập dữ liệu chung, do vậy có thể xảy ra xung đột (khiến kết quả không như mong muốn)

Ví dụ:

Trang 7

Kết quả không thể xác định được (không nhất quán) khi nhiều thread cùng truy cập

Ưu điểm và hạn chế của cơ chế đa tuyến

Ưu điểm:

Trong một ứng dụng có thể cho nhiều "công việc" (tuyến-thread) được thực thi đồng thời Các công việc này hoạt động độc lập với nhau và đóng vai trò như những chương trình riêng biệt Một thread có thể treo (Hang) mà không ảnh hưởng đến các thread khác

Đa tuyến đặc biệt hữu ích trong việc xây dựng các ứng dụng Server – cái mà đáp ứng nhiều yêu cầu từ các Client

Hạn chế:

Việc cài đặt chương trình theo kiểu đa tuyến phức tạp hơn Đồng thời phải giải quyết vấn đề xung đột tài nguyên dùng chung Việc cài đặt đa tuyến cũng sẽ tốn bộ nhớ hơn vì

hệ thống phải lưu lại những thông tin về mỗi thread Hơn nữa Processor phải mất nhiều thời gian hơn cho việc luân chuyển (switching) giữa các tuyến với nhau Một vấn đề khác nữa là tình huống khóa chết – deadlock !

Trang 8

Khóa chết – Deadlock

Đa tuyến trong NET

MS.NET Framework cung cấp cho nhà phát triển cơ chế đa tuyến theo mô hình Free

Threading Việc tạo và quản lý tuyến được thực hiện thông qua lớp Thread, thuộc namespace là System.Threading.

Mô tả về lớp Thread:

Một số phương thức thường dùng

Một số thuộc tính public thường dùng:

Trang 9

Tạo một Thread trong VB.NET

Cú pháp tạo một tuyến trong VB.NET

ở trên là một ví dụ về : Một tiến trình có một Thread

- Phân tích ví dụ trên:

- Một số câu hỏi:

Trang 10

Cho biết trình tự hiển thị các thông báo khi chạy chương trình sau đây:

Ví dụ 2: Tạo nhiều thread trong một tiến trình

Trong một chương trình (tiến trình) có thể tạo nhiều Thread, ví dụ:

Câu hỏi: Cho biết thứ tự thông báo sau đây ?

Trang 11

Một ví dụ khác:

Trang 12

Phương thức Join()

Theo mặc định, khi gọi phương thức Start của một thread thì câu lệnh ngay sau nó sẽ được thực thi mà không phụ thuộc vào việc thread đó đã kết thúc hay chưa Như vậy, trong trường hợp nếu câu lệnh ngay sau lời gọi phương thức Start mà phụ thuộc vào kết quả thực thi của Thread (nói cách khác là ta muốn thread phải kết thúc trước khi làm câu lệnh sau Start) thì sẽ dẫn đến kết quả sai

Ví dụ: Hiển thị các số từ 1 đến 10 Sau khi hiển thị xong thì thông báo "Đã xong !"

→ Rõ ràng là thông báo "Đã xong" chỉ được thực hiện sau khi Thread kết thúc

Trang 13

Lưu ý: Phương thức Join chỉ được gọi nếu Thread đang ở trạng thái Running (Trước đó

phải Start rồi) Có thể kiểm tra trạng thái của thread thông qua ThreadState.

Vấn đề xung đột trong cơ chế đa tuyến.

Trong ứng dụng windows Form, khi có nhiều Thread của ứng dụng truy cập ghi (write) đến điều khiển (Control) trên Form (tổng quát là truy cập đến Control toàn cục) thì NET

luôn cảnh báo với lỗi : "Cross-thread operation not valid…."

→ Giải quyết vấn đề này:

+ Nếu bạn thấy rằng việc truy cập đồng thời không gây ra những lỗi tiềm ẩn hay kết quả

có thể xác định được thì bạn cứ dịch ra file Exe và chạy bình thường Hoặc:

+ System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False

+ Hoặc không Nhấn F5 (chế độ chạy có Debug) mà nhấn Ctrl-F5 (Không debug)

Ví dụ:

Tạo 2 thread, một thread TinhTong và một Thread TinhHieu của 2 số, kết quả hiển thị

trên 2 Label tương ứng

→ Rõ ràng hai thread này chỉ đọc giá trị trong textbox và ghi kết quả ra 2 label riêng biệt nên không có lỗi tiềm ẩn nào → ta không cần quan tâm đến cảnh báo của VS.NET

Ý nghĩa : Tại một thời điểm chỉ cho phép một thread chạy đoạn lệnh (*) mà thôi Điều

này giúp ta tránh được các kết quả không theo ý muốn

Trang 14

Ví dụ 2:

Viết 2 Thread, mỗi thread đều hiển thị kết quả trên cùng một textbox

Trang 15

Kết quả khi có SyncLock

Một số ví dụ

Viết chương trình thể hiện 2 thanh tiến trình.

Trang 16

Viết chương trình mô phỏng đồng hồ điện tử

Trang 18

Viết chương trình Copy file lớn ra các file con

Đầu vào: Tệp có kích thước n Tên file là FileName và một số k <= n

Đầu ra : chia tệp thành k hoặc k + 1 tệp, sử dụng cơ chế đa luồng

Trang 19

Tham gia đóng góp

Tài liệu: Lập trình đa tuyến (MULTITHREADING)

Biên tập bởi: Khoa CNTT ĐHSP KT Hưng Yên

URL: http://voer.edu.vn/c/bc908932

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Module: Lập trình đa tuyến (MULTITHREADING)

Các tác giả: Khoa CNTT ĐHSP KT Hưng Yên

URL: http://www.voer.edu.vn/m/67c5818c

Giấy phép: http://creativecommons.org/licenses/by/3.0/

Trang 20

Chương trình Thư viện Học liệu Mở Việt Nam

Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources – VOER) được hỗ trợ bởi Quỹ Việt Nam Mục tiêu của chương trình là xây dựng kho Tài nguyên giáo dục Mở miễn phí của người Việt và cho người Việt, có nội dung phong phú Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0

do đó các nội dung đều có thể được sử dụng, tái sử dụng và truy nhập miễn phí trước hết trong trong môi trường giảng dạy, học tập và nghiên cứu sau đó cho toàn xã hội

Với sự hỗ trợ của Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) đã trở thành một cổng thông tin chính cho các sinh viên và giảng viên trong và ngoài Việt Nam Mỗi ngày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, học tập và tải tài liệu giảng dạy về Với hàng chục nghìn module kiến thức từ hàng nghìn tác giả khác nhau đóng góp, Thư Viện Học liệu Mở Việt Nam là một kho tàng tài liệu khổng lồ, nội dung phong phú phục vụ cho tất cả các nhu cầu học tập, nghiên cứu của độc giả

Nguồn tài liệu mở phong phú có trên VOER có được là do sự chia sẻ tự nguyện của các tác giả trong và ngoài nước Quá trình chia sẻ tài liệu trên VOER trở lên dễ dàng như đếm 1, 2, 3 nhờ vào sức mạnh của nền tảng Hanoi Spring

Hanoi Spring là một nền tảng công nghệ tiên tiến được thiết kế cho phép công chúng dễ dàng chia sẻ tài liệu giảng dạy, học tập cũng như chủ động phát triển chương trình giảng dạy dựa trên khái niệm về học liệu mở (OCW) và tài nguyên giáo dục mở (OER) Khái niệm chia sẻ tri thức có tính cách mạng đã được khởi xướng và phát triển tiên phong bởi Đại học MIT và Đại học Rice Hoa Kỳ trong vòng một thập kỷ qua Kể từ đó, phong trào Tài nguyên Giáo dục Mở đã phát triển nhanh chóng, được UNESCO hỗ trợ và được chấp nhận như một chương trình chính thức ở nhiều nước trên thế giới

Ngày đăng: 08/06/2016, 20:35

TỪ KHÓA LIÊN QUAN

w