Danh mục

C# và các lớp cơ sở Thread ( luồng ) – Phần 2

Số trang: 12      Loại file: pdf      Dung lượng: 109.84 KB      Lượt xem: 17      Lượt tải: 0    
Jamona

Hỗ trợ phí lưu trữ khi tải xuống: 4,000 VND Tải xuống file đầy đủ (12 trang) 0

Báo xấu

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

ThreadPlayaround Interval to display results at? 1000000 Starting thread: Main Thread Main Thread: Current Culture = en-GB Main Thread: count has reached 1000000 Starting thread: Worker Worker: Current Culture = en-GB Main Thread: count has reached 2000000 Worker: count has reached 1000000 Main Thread: count has reached 3000000 Worker: count has reached 2000000
Nội dung trích xuất từ tài liệu:
C# và các lớp cơ sở Thread ( luồng ) – Phần 2 C# và các lớp cơ sở Thread ( luồng ) – Phần 2ThreadPlayaroundInterval to display results at?> 1000000Starting thread: Main ThreadMain Thread: Current Culture = en-GBMain Thread: count has reached 1000000Starting thread: WorkerWorker: Current Culture = en-GBMain Thread: count has reached 2000000Worker: count has reached 1000000Main Thread: count has reached 3000000Worker: count has reached 2000000Main Thread: count has reached 4000000Worker: count has reached 3000000Main Thread: count has reached 5000000Main Thread: count has reached 6000000Worker: count has reached 4000000Main Thread: count has reached 7000000Worker: count has reached 5000000Main Thread: count has reached 8000000Main Thread FinishedWorker: count has reached 6000000Worker: count has reached 7000000Worker: count has reached 8000000Worker Thread FinishedTa có thể thấy các luồng thực sự làm việc song song. luồng chính bắt đầu vàđếm đến 1 triệu. ở 1 vài thời điểm , trong khi luồng chính đang đếm th ìluồng công việc ( worker thread ) bắt đầu, và từ đó 2 luồng xử lí cùng tốc độcho đến khi chúng hoàn thành.1 điều lưu ý là khi ta xử lí đa luồng trên 1 CPU thì ta không hề tiết kiệmđược thời gian , ví dụ trên máy có 1 bộ xử lí , nếu có 2 luồng đếm đến 8 triệusẽ bằng thời gian 1 luồng đếm đến 16 triệu. nhưng lợi điểm của đa luồng là :đầu tiên ta có thể tăng tốc độ đáp ứng, nghĩa là 1 luồng có thể giao tiếp vớingười dùng trong khi luồng khác làm một công việc gì đó phía sau hậutrường.thứ hai, ta sẽ tiết kiệm thời gian nếu 1 hay nhiều luồng đang làm 1công việc gì đó không dính dáng đến thời gian CPU, như là đợi cho dữ lệuđến đển nhận từ internet, bởi vì các luồng khác có thể nhảy vào tiến trìnhcủa chúng trong khi luồng không hoạt động đang chờ.Độ ưu tiên luồngTa có thể đăng kí các độ ưu tiên khácnhau cho các luồng khác nhau trong 1tiến trình. nói chung , 1 luồng không đưọc cấp phát 1 time slice nào nếu có 1luồng có độ ưu tiên cao hơn đang làm việc. lợi điểm của điều này là ta có thểthiết lập độ ưu tiên cao hơn cho luồng xử lí việc nhập của người dùng.Các luồng có độ ưu tiên cao có thể cản trở các luồng có độ ưu tiên thấp chođó ta cần thận trọng khi cấp quyền ưu tiên . độ ưu tiên của luồng được địnhnghĩa là các giá trị trong bản liệt kê ThreadPriority. các giá trị : Highest,AboveNormal, Normal, BelowNormal, LowestLưu ý rằng mỗi luồng có 1 độ ưu tiên cơ sở. và những giá trị này liên quanđến độ ưu tiên trong tiến trình. cho 1 luồng có độ ưu tiên cao hơn đảm bảonó sẽ chiếm quyền ưu tiên so với các luồng khác trong tiến trình. nhưngcũng có 1 số luồng khác của hệ thống đang chạy có quyền ưu tiên còn caohơn . Windows có khuynh hướng đặt độ ưu tiên cao cho các luồng hệ điềuhành của riêng nó.Ta có thể thấy tác động của việc thay đổi độ ưu tiên của luồng bằng cáchthay đổi phương thức main() trong ví dụ ThreadPlayaround :ThreadStart workerStart = new ThreadStart(StartMethod);Thread workerThread = new Thread(workerStart);workerThread.Name = Worker;workerThread.Priority = ThreadPriority.AboveNormal;workerThread.Start();Ở đây ta thiết lập luồng công việc ( worker) có độ ưu tiên cao hơn luồngchính . kết quả là :ThreadPlayaroundWithPrioritiesInterval to display results at?> 1000000Starting thread: Main ThreadMain Thread: Current Culture = en-GBStarting thread: WorkerWorker: Current Culture = en-GBMain Thread: count has reached 1000000Worker: count has reached 1000000Worker: count has reached 2000000Worker: count has reached 3000000Worker: count has reached 4000000Worker: count has reached 5000000Worker: count has reached 6000000Worker: count has reached 7000000Worker: count has reached 8000000Worker Thread FinishedMain Thread: count has reached 2000000Main Thread: count has reached 3000000Main Thread: count has reached 4000000Main Thread: count has reached 5000000Main Thread: count has reached 6000000Main Thread: count has reached 7000000Main Thread: count has reached 8000000Main Thread FinishedSự đồng bộ1 khía cạnh chủ yếu khác của luồng là sự đồng bộ hay là việc truy nhập 1biến bởi nhiều luồng vào cùng thời điểm.nếu ta không đảm bảo được sựđồng bộ thì sẽ gây ra các lỗi tinh vi .Đồng bộ là gì ?Hãy nhìn câu lệnh sau :message += , there; // message là 1 chuỗi chứa chữ helloTrông có vẻ như là 1 lệnh nhưng thực sự thì lệnh phải thi hành nhiều thaotác khi thực thi câu lệnh này. bộ nhớ sẽ cần được cấp phát để lưu trữ 1 chuỗidài hơn, biến message sẽ cần được tham chiếu đến vùng nhớ mới, chuỗi thựcsự cần được sao chép ..Trong tính huống 1 câu lệnh đơn có thể được phiên dịch thành nhiều lệnhcủa mã máy , có thể xảy ra trường hợp time slice của luồng đang xử lí cáclệnh trên kết thúc. nếu điều này xảy ra , 1 luồng khác trong cùng tiến trình cóthể nhận ...

Tài liệu được xem nhiều: