1. Trang chủ
  2. » Công Nghệ Thông Tin

nền tảng lập trình c bài 10 threading

33 354 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Nền tảng lập trình C bài 10 threading
Trường học Trường Đại Học Khoa Học Tự Nhiên TP.HCM
Chuyên ngành Khoa học máy tính
Thể loại Bài giảng
Thành phố TP.HCM
Định dạng
Số trang 33
Dung lượng 342,84 KB

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

Nội dung

• Threading là một khái niệm quan trọng trong pháttriể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

Trang 2

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ộ

Trang 3

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ự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.

Trang 4

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

Trang 6

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)

CurrentContext

CurrentPrincipal p

CurrentThread

Trang 7

Các thuộc tính và phương thức của tiến trình

Trang 8

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)

Trang 9

Các thao tác trên tiến trình

− Khở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

Trang 10

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ề

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

Trang 11

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

Trang 12

”,Thread.CurrentThread.Manag edThreadID);

Thread myThread=new Thread( op );

myThread Start ();

Start để thực thi tiến trình mới.

Trang 13

− Đ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ểm

cù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 ();

}

}

Trang 14

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 ();

Trang 17

SomeClass.WriteToConsole();

}

Trang 18

Start Do work More work Even

more work Done

Even

dùng critical region

Start Do work More work Even

more work Done

Trang 19

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

Asynchronous Programming Model (APM).

.NET framework hỗ trợ APM qua nhiều lớp có cung

cấ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.

Trang 20

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);

strm.Close();

Console.WriteLine("Read {0}",numBytes);

Console.WriteLine(BitConverter.ToString(buffer));

Trang 21

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

− Callback

Trang 23

− Tương tự Wait-Until-Done, nhưng có thăm dò

IAsyncResult để 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ộ

Trang 24

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 để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”);

Trang 25

− Khi dùng APM, các tác vụ có thể phát sinh các ngoại

Trang 26

ThreadPool

Timer

Timer

Trang 27

ThreadPool thực thi nhanh

Điều khiển số luồng thực thi tại cùng 1 thời điểm Điều khiển số luồng thực thi tại cùng 1 thời điểm

Trang 28

Sử 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++){

WaitCallback workItem=new WaitCallback( WorkWithParameter );

if (ThreadPool QueueUserWorkItem (workItem ”ThreadPooled”);

if (ThreadPool QueueUserWorkItem (workItem,”ThreadPooled”);

Console.WriteLine(“Could not queue item”);

Trang 29

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ố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

Trang 30

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;

ThreadPool.GetMaxThreads(out threads,out completionPorts);

ThreadPool SetMaxThreads (threads+10,completionPorts+100);

Trang 31

Timer

− Lớp Timer hỗ trợ thực thi một phương thức được thamchiế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ộttiến trình trong ThreadPool

Trang 32

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

eString());

} TimerCallback tc=new

Thời gian chờ đến khi khởi động Timer.

Khoảng thời gian giữa các lần khởi động

Trang 33

Thanks

Ngày đăng: 23/05/2014, 15:59

TỪ KHÓA LIÊN QUAN

w