Thảo luận Bài 5 (Đa luồng)

Trang 5 trong tổng số 6 trang Previous  1, 2, 3, 4, 5, 6  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  NguyenTrongHuy(I11C) on 13/10/2011, 14:29


Multithread trong java
1.1 Khái niệm
Thread là một đơn vị (nhóm) chứa các dòng điều khiển trong một tiến trình hay ứng dụng, chúng được hệ điều hành sử dụng để thực thi một công việc. Và với cơ chế multithread ứng dụng của ta có thể thực thi nhiều công việc đồng thời. Mỗi thread sẽ có một chỉ số xác định quyền ưu tiên, thread nào có quyền ưu tiên cao sẽ được thực thi trước, và thấp thì thực thi sau. Việc thực thi và đánh chỉ số ưu tiên sẽ được thực hiện tự động bởi hệ điều hành để tránh một thread nào đợi quá lâu mà không được vào xử lý.
Cũng như các ngôn ngữ lập trình khác, java hỗ trợ ngay (trong bản thân ngôn ngữ) khá đầy đủ các yêu cầu, xử lý của một ứng dụng multithread.
1.2 Tạo và quản lý thread
Trong chương trình java luôn có một thread chính được thực thi, các thread khác sẽ được tạo ra như các thread con, việc mở đầu và kết thúc một ứng dụng được thực hiện bởi thread chính đó.
Hình dưới minh họa vòng đời của một thread:

Để tạo và quản lý thread trong java, chúng ta dựa vào lớp Thread và Runnable interface
Runnable là một interface dùng để các lớp khác implement để sử dụng thread. Trong lớp implement đó bắt buộc phải định nghĩa một phương thức là void run().
Ví dụ ta có 2 lớp StringThread implement Runnable, và một lớp TestClass để tạo ra thread và run nó.
public class StringThread implements Runnable {
private String str;
private int num;

StringThread(String s, int n)
{
str = new String(s);
num = n;
}

/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (int i = 1; i <= num; i++)
System.out.print(str + " ");

}
}
public class TestClass {

/**
* @param args
*/
public static void main(String[] args) {
StringThread t = new StringThread("Thread", 10);
new Thread(t).start();
}

}
Kết quả in ra màn hình sẽ là: Thread Thread Thread Thread Thread Thread Thread Thread Thread Thread
Thread là một lớp viết sẵn trong java, nó implement Runnable interface. Nếu chúng ta muốn sử dụng thread chỉ cần viết một lớp và kế thừa (extends) từ lớp Thread này

NguyenTrongHuy(I11C)

Tổng số bài gửi : 18
Join date : 19/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  NguyenTrongHuy(I11C) on 13/10/2011, 14:30

Một số hàm thông dụng của Thread
• start bắt đầu thực thi thread
• sleep đưa trạng thái về trạng thái đợi (không thực thi nữa)
• resume thực thi lại thread từ trạng thái đợi hoặc dead-lock
• join đợi để cho đến khi thread này chết
• isAlive kiểm tra thread còn đang sống hay đã bị kill
• getName lấy tên của thread
• getPriority trả về độ ưu tiên của thread
• setName đặt tên cho thread
• setPriority đặt độ ưu tiên cho thread
• …
Ví dụ tương tự việc sử dụng thread với Runnable interface, chúng ta cũng có thể kế thừa tự lớp có sẵn là Thread như sau:
class StringThread extends Thread {

public void run() {
System.out.println("Inherit successfully from Thread class!");
}
}

public class TestClass {
public static void main(String[] args) {
StringThread t = new StringThread();
new Thread(t).start();
}

}
Kết quả in ra sẽ là: Inherit successfully from Thread class!

1.3 Các lớp Timer, TimerTask và SchedulingTask
Timer là một lớp tiện ích giúp cho việc lập lịch và kiểm soát việc thực thi một task vụ nào đó. Ví dụ bạn muốn dùng việc cập nhật thông trong 5 phút tới, hay thông tin chỉ được tồn tại 10h sau đó sẽ tự động bị xóa đi,… Một số hàm thông dụng trong Timer như:
• schedule lên lịch để thực thi task khi nào bắt đầu, kết thúc hay lặp lại, …
• cancel dừng timer và hủy tất cả các task đã lên lịch trong timer
• purge xóa tất cả các task đã dùng trong hàng đợi timer
TimerTask là một lớp trừu tượng implement Runnable interface, nó giúp cho việc lập lịch thực thi các thread
Ví dụ ta có một lớp MyTimerTask kế thừa từ TimerTask như bên dưới
class MyTimerTask extends TimerTask {
public void run() {
System.out.println("Running the scheduled task by Timer");
System.gc();
}
}

public class TestClass {
public static void main(String[] args) {
Timer timer = new Timer();
MyTimerTask task = new MyTimerTask();

timer.schedule(task, 3000, 2000);//Execute task after 3 senconds and then repeat in 2 seconds period
}
}
Kết quả in ra màn hình sau 5 giây sẽ là: Running the scheduled task by Timer
Running the scheduled task by Timer

NguyenTrongHuy(I11C)

Tổng số bài gửi : 18
Join date : 19/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  NguyenTrongHuy(I11C) on 13/10/2011, 14:31

1.4 Xử lý các vấn đề chúng trong multithread như synchronized, lock, dead lock, wait, notify …
Đồng bộ (Synchronization) là cơ chế giúp cho đồng bộ việc truy cập cùng tài nguyên của nhiều thread khác nhau. Như chúng ta biết vì cơ chế thread là cơ chế làm việc đồng thời do đó có khả năng một tài nguyên sẽ bị truy cập bởi nhiều thread khác nhau.
Ví dụ ta xây dựng 3 lớp Socola, Producer, Consumer. Lớp Socola chứa thông tin, lớp Producer tạo thông tin và gán vào cho Socola, Lớp Consumer sẽ ăn (tiêu thụ) thông tin đó.
public class TestClass {
public class Socola {
private int contents = 0;
public boolean isRemainingContents;

public synchronized int get() {
//print onto screen
System.out.println("\tConsumer get " + this.contents);
return contents;
}

public synchronized void set(int piContents) {
this.contents = piContents;

//print onto screen
System.out.println("Producer set " + this.contents);
}
}

public class Producer extends Thread {
private Socola socola;

Producer(Socola pSocola) {
socola = pSocola;
}

public void run() {
for(int i = 0; i < 10; i++) {
socola.set(i);

try {
Thread.sleep(100);
} catch (InterruptedException e) {

}
}
}
}

public class Consumer extends Thread {
private Socola socola;

Consumer(Socola pSocola) {
socola = pSocola;
}

public void run() {
for(int i = 0; i < 10; i++) {
socola.get();

try {
Thread.sleep(100);
} catch (InterruptedException e) {

}
}
}
}

public static void main(String[] args) {
TestClass t = new TestClass();
Socola s = t.new Socola();

Producer p = t.new Producer(s);
Consumer c = t.new Consumer(s);
p.start();
c.start();
}
}
Kết quả in ra màn hinh sẽ không giống nhau tại các lần chạy, ví dụ 1 lần chạy:
Producer set 0
Consumer get 0
Producer set 1
Consumer get 1
Producer set 2
Consumer get 2
Producer set 3
Consumer get 3
Producer set 4
Consumer get 4
Consumer get 4
Producer set 5
Producer set 6
Consumer get 6
Producer set 7
Consumer get 7
Consumer get 7
Producer set 8
Consumer get 8
Producer set 9

NguyenTrongHuy(I11C)

Tổng số bài gửi : 18
Join date : 19/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Khái niệm luồng và ví dụ minh họa. Tại sao phải chung code?

Bài gửi  DaoVanHoang (I11C) on 13/10/2011, 15:27

Khái niệm:
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình
Ví dụ minh họa: Trong 1 lớp học có 2 luồng. giảng viên là 1 luồng, sinh viên trong lớp là 1 luồng. Bởi thầy giáo có công việc đặc trưng là giảng bài, còn tất cả sinh viên là 1 luồng vì tất cả sinh viên có 1 công việc chung là nghe giảng và viết bài (có chung 1 công việc).

Tại sao phải chung code?
Bởi vì khi thay đổi mã nguồn phát triển ứng dụng chỉ cần thay đổi 1 chỗ thì tất cả sẽ thay đổi theo.

DaoVanHoang (I11C)

Tổng số bài gửi : 24
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Các câu hỏi bài 5 (Đa Luồng). Bạn nào bận ko đi học dc thì xem để thi :)

Bài gửi  DaoVanHoang (I11C) on 13/10/2011, 15:31

Câu 1: Trình bày khái niệm luồng. Cho ví dụ minh họa. So sánh với khái niệm tiến trình truyền thông.
Câu 2: Những lợi ích của công nghệ đa luồng.
Câu 3: Trình bày nguyên lý tập luồng và ứng dụng. Cho ví dụ minh họa.
Câu 4: Lập trình đa luồng trong windows và .NET

DaoVanHoang (I11C)

Tổng số bài gửi : 24
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  NguyenNgocMyTien(I11C) on 13/10/2011, 15:40

NguyenThanhTam (I11C) đã viết:* Khái niệm đa luồng: Luồng còn gọi là tiến trình nhẹ (LWP-Light Weight Process), cũng là một đơn vị cơ bản sử dụng CPU.
* So sánh:
- Tiến trình (Process) là chuơng trình trong thời gian thực hiện (đặt dưới sự quản lý của HĐH).
- Luồng (Thread) còn gọi là tiến trình nhẹ (LWP-Light Weight Process), một đơn vị cơ bản sử dụng CPU.
- Luồng cũng có thông tin trạng thái như của tiến trình truyền thống (HWP- Heavy Weight Process).
- Tiến trình có thể có một luồng chính với nhiều luồng phụ. Mỗi luồng có khả năng chia sẻ tài nguyên với các luồng khác trong tiến trình.
- Nhiều luồng có thể cùng chung một mã chương trình
Mình xin bổ sung thêm sự khác nhau giữa tiến trình và luồng.(Phần này mình ghi nhận lúc nghe giảng trên lớp, vẫn còn thiếu một vài ý, các bạn bổ sung thêm giúp mình cho đầy đủ nhé.Cảm ơn các bạn ^^! )
-Sự khác nhau:
+ Tiến trình truyền thống hay còn gọi là tiến trình nặng bao gồm có nhiều luồng bên trong
+ Bên trong luồng thì không có luồng nữa.
+ Hệ điều hành hỗ trợ đa luồng.
+ Luồng là tiến trình nhẹ.
+ Tiến trình truyền thống bao gồm 1 hoặc nhiều luồng bên trong.
+ Luồng còn khác tiến trình truyền thống là dùng chung tài nguyên.
+ Nhiều luồng có thể cùng chung 1 mã chương trình.
VD: Trong lớp học chúng ta có 2 luồng là thầy và sinh viên.Mỗi sinh viên làm việc giống nhau, học giống nhau => dùng chung 1 code.
Tại sao lại dùng chung 1 code ?
Vì khi phát triển mã mới chỉ thay đổi 1 chỗ nhưng "ăn" cho tất cả các luồng của tiến trình.
avatar
NguyenNgocMyTien(I11C)

Tổng số bài gửi : 27
Join date : 01/09/2011
Age : 30
Đến từ : Long An

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  NguyenNgocMyTien(I11C) on 13/10/2011, 16:42

Tranvancanh(I11C) đã viết:
NguyenXuanTri28 đã viết:Những lợi ích của công nghệ đa luồng

Khả năng đáp ứng (Responsiveness) tốt hơn: Trong khi một luồng bị ách hoặc quá bận, luồng khác vẫn vận hành bình thường (Luồng chính của trình duyệt vẫn tương tác với người dùng trong khi dữ liệu được lấy về).
Ví dụ: Các cô ở tổng đài 108 là các luồng. Khi khách hàng điện thoại hỏi 108. Nếu chỉ có 1 cô phải trực 10 máy điện thoại thì khi chỉ có 1 cuộc điện thoại gọi đến thì cô sẽ trả lời tốt nhưng khi có khoảng 3 cuộc điện thoại trở lên thì cô không thể trả lời được kịp hết.
Nếu có nhiều cô cùng trực điện thoại thì lúc đó sẽ tốt hơn, đáp ứng được nhu cầu của khách hàng khi họ gọi đến .
Nếu trong thời điểm đó khách hàng thứ hai gọi 108, thì một trong các cô (cô thứ 2) còn lại sẽ trả lời cho khách hàng.

Chia sẻ tài nguyên (Resource Sharing): Theo mặc định, các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha. Vài luồng cùng vận hành trong 1 vùng địa chỉ, do đó dễ dùng chung tài nguyên hơn so với trường hợp đa tiến trình.
Ví dụ: Trong nhà ta có kệ sách, tivi, xe gắn máy, ... mọi người trong nhà có thể dùng chung sách, tivi, xe máy.

Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là công việc tốn kém. Do luồng chung tài nguyên với cha và các luồng khác, việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn (Solaris 2: Tạo tiến trình chậm hơn 30 lần, Chuyển ngữ cảnh chậm hơn 5 lần).
Ví dụ: Các bạn trong lớp là các luồng đang dùng chung một cái bảng, ai cần ghi thi ghi, ai cần thì chụp hình về xem

Tận dụng được thế mạnh của kiến trúc đa xử lý: Đa luồng làm tăng tính song song trên hệ máy nhiều CPU. Mỗi luồng có thể chạy bởi CPU riêng.
Mình xin bổ sung thêm cho đầy đủ nhé
Những lợi ích của công nghệ đa luồng?
- Khả năng đáp ứng tốt hơn, khi 1 luồng bị treo hoặc quá bận thì luồng khác vẫn làm việc 1 cách bình thường (Luồng chính của người dùng vẫn tương tác tốt với người dùng trong khi vẫn lấy được dữ liệu về.
VD: Tổng đài 188 là 1 vd minh họa của đa luồng (1 cô nhân viên trực trả lời tổng đài khi 1 khách hàng gọi hỏi (7 kì quan trên thế giới là những kì quan nào…) Trong khi đó nhân viên đó đang bận nhưng tổng đài có rất nhiều cô nhân viên khác phục vụ (gọi là đa luồng), 1 cô phục vụ (gọi là đơn luồng), cô nhân viên đó đang bận vẫn có sự trả lời của cô khác cứ như thế làm việc gọi là đa luồng.
- Đa luồng chia sẽ tài nguyên dể dàng, mặc định các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha. Vài luồn vận hành cùng 1 địa chỉ do đó dể dùng chung tài nguyên hơn so với trường hợp đa tiến tình.
VD: Trong lớp học việc dùng chung 1 cái bảng dể sửa dể thay đổi, nếu thay đổi sẽ thay đổi tất cả.
- Đa luồng tiết kiệm hơn: Cấp phát bộ nhớ và tài nguyên cho tiến trình là công việc tốn kém. Do luồn chung tài nguyên với cha và các luồng khác, việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn. Việc tạo mới 1 luồng sẽ dể hơn rất nhiều so với việc tạo mới 1 tiến tình mới.
VD: Trong 1 gia đình có anh chị sắp xây dựng 1 gia đình mới nếu như xây thêm 1 căn nhà (hoặc căn phòng) sẽ tốn kém và khó hơn rất nhiều so với việc ngăn 1 căn phòng trong 1 gia đình lớn thành nhiều ngăn (chia ra nhiều phòng sẽ nhanh hơn và tiết kiệm hơn rất nhiều so với tạo dựng mới, tiết kiệm hơn rất nhiều.
- Tận dụng được thế mạnh của kiến trúc đa xử lý : Đa luồng làm tăng tính song song trên hệ máy nhiều CPU. Mỗi luồng có thể chạy bởi CPU riêng. Việc chuyển từ luồng này sang luồng kia là rất nhanh.
- Lập trình đa luồng dể hơn là lập trình đa tiến trình.
Các bạn vào góp ý nhé.
Các bạn trình bày khá chi tiết và rõ ràng.Thanks ^^!
avatar
NguyenNgocMyTien(I11C)

Tổng số bài gửi : 27
Join date : 01/09/2011
Age : 30
Đến từ : Long An

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  n.t.tuyet.trinh90 (I11C) on 14/10/2011, 09:37

nguyenthanhphuong(I11C) đã viết:
n.t.tuyet.trinh90 (I11C) đã viết:
VoMinhHoang (I11C) đã viết:- Mô hình Many – to – One là nhiều User level threads được ánh xạ vào một Kernel Thread. Việc quản lý được thực hiện ở User Level, khi có một thread bị block thì toàn bộ các Process cũng bị block theo.
- Mô hình One – to – One là mỗi User level thread được gắn với một Kernel thread. Khi có một user thread mới được tạo ra thì cũng cần tạo một Kernel thread tương ứng, lúc này chi phí quá lớn.
- Mô hình Many – to – Many nhiều User level thread được phân chia ánh xạ vào một số Kernel thread. Tránh được các khuyết điếm của 2 mô hình trên.

Bạn VoMinhHoang ơi! Bạn có thể giải thích và cho ví dụ cụ thể hơn được không? Mình không rõ các vấn đề này lắm! Thanks bạn!

- Mô hình nhiều-một (Many - To - One ) ánh xạ nhiều luồng cấp người dùng tới
một luồng cấp nhân. Quản lý luồng được thực hiện trong không gian người dùng vì
thế nó hiệu quả nhưng toàn bộ quá trình sẽ bị khóa nếu một luồng thực hiện lời gọi hệ
thống khóa. Vì chỉ một luồng có thể truy xuất nhân tại một thời điểm nên nhiều luồng
không thể chạy song song trên nhiều bộ xử lý. Green threads-một thư viện luồng được
cài đặt trên các hệ điều hành không hỗ trợ luồng nhân dùng mô hình nhiều-một.

- Mô hình một-một (One - To - One) ánh xạ mỗi luồng người dùng tới một luồng
nhân. Nó cung cấp khả năng đồng hành tốt hơn mô hình nhiều-một bằng cách cho một
luồng khác chạy khi một luồng thực hiện lời gọi hệ thống nghẽn; nó cũng cho phép
nhiều luồng chạy song song trên các bộ xử lý khác nhau. Chỉ có một trở ngại trong
mô hình này là tạo luồng người dùng yêu cầu tạo một luồng nhân tương ứng. Vì chi
phí cho việc tạo luồng nhân có thể đè nặng lên năng lực thực hiện của ứng dụng, các
cài đặt cho mô hình này giới hạn số luồng được hỗ trợ bởi hệ thống. Windows NT,
Windows 2000 và OS/2 cài đặt mô hình một-một này.

- Mô hình nhiều-nhiều (Many - To - Many) đa hợp nhiều luồng cấp người dùng tới
số lượng nhỏ hơn hay bằng các luồng nhân. Số lượng các luồng nhân có thể được xác
định hoặc một ứng dụng cụ thể hay một máy cụ thể (một ứng dụng có thể được cấp
nhiều luồng nhân trên một bộ đa xử lý hơn trên một bộ đơn xử lý). Trong khi mô hình
nhiều-một cho phép người phát triển tạo nhiều luồng người dùng như họ muốn, thì
đồng hành thật sự là không đạt được vì nhân có thể lập thời biểu chỉ một luồng tại một
thời điểm. Mô hình một-một cho phép đồng hành tốt hơn nhưng người phát triển phải
cẩn thận không tạo ra quá nhiều luồng trong một ứng dụng. Mô hình nhiều-nhiều gặp
phải một trong hai vấn đề khiếm khuyết: người phát triển có thể tạo nhiều luồng
người dùng khi cần thiết và các luồng nhân tương ứng có thể chạy song song trên một
bộ đa xử lý. Khi một luồng thực hiện một lời gọi hệ thống khóa, nhân có thể lập thời
biểu một luồng khác thực thi. Solaris 2, IRIX, HP-UX, và Tru64 UNIX hỗ trợ mô
hình này.

---- Hy vọng giúp được bạn Trinh Smile

Ui, cảm ơn bạn Thanh Phương nhiều nghen lol!
avatar
n.t.tuyet.trinh90 (I11C)

Tổng số bài gửi : 24
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Thuận lợi của lập trình đa luồng

Bài gửi  TRANTHINHPHAT (I11C) on 14/10/2011, 13:20

Thuận lợi
Những thuận lợi của lập trình đa luồng có thể được chia làm bốn loại:
• Sự đáp ứng: đa luồng một ứng dụng giao tiếp cho phép một chương trình tiếp tục chạy thậm chí nếu một phần của nó bị khóa hay đang thực hiện một thao tác dài, do đó gia tăng sự đáp ứng đối với người dùng. Thí dụ, một trình duyệt web vẫn có thể đáp ứng người dùng bằng một luồng trong khi một ảnh đang được nạp bằng một luồng khác.
• Chia sẻ tài nguyên: Mặc định, các luồng chia sẻ bộ nhớ và các tài nguyên của các quá trình mà chúng thuộc về. Thuận lợi của việc chia sẽ mã là nó cho phép một ứng dụng có nhiều hoạt động của các luồng khác nhau nằm trong cùng không gian địa chỉ.
• Kinh tế: cấp phát bộ nhớ và các tài nguyên cho việc tạo các quá trình là rất đắt. Vì các luồng chia sẻ tài nguyên của quá trình mà chúng thuộc về nên nó kinh tế hơn để tạo và chuyển ngữ cảnh giữa các luồng. Khó để đánh giá theo kinh nghiệm sự khác biệt chi phí cho việc tạo và duy trì một quá trình hơn một luồng, nhưng thường nó sẽ mất nhiều thời gian để tạo và quản lý một quá trình hơn một luồng. Trong Solaris 2, tạo một quá trình chậm hơn khoảng 30 lần tạo một luồng và chuyển đổi ngữ cảnh chậm hơn 5 lần.
• Sử dụng kiến trúc đa xử lý: các lợi điểm của đa luồng có thể phát huy trong kiến trúc đa xử lý, ở đó mỗi luồng thực thi song song trên một bộ xử lý khác nhau. Một quá trình đơn luồng chỉ có thể chạy trên một CPU. Đa luồng trên một máy nhiều CPU gia tăng tính đồng hành. Trong kiến trúc đơn xử lý, CPU thường chuyển đổi qua lại giữa mỗi luồng quá nhanh để tạo ra hình ảnh của sự song song nhưng trong thực tế chỉ một luồng đang chạy tại một thời điểm.

TRANTHINHPHAT (I11C)

Tổng số bài gửi : 52
Join date : 29/08/2011
Age : 28
Đến từ : THU DAU MOT, BINH DUONG

Xem lý lịch thành viên

Về Đầu Trang Go down

Những mô hình đa luồng

Bài gửi  LeMInhTien(I11C) on 14/10/2011, 22:35

* Mô hình Many - to - One là nhiều User level threads được ánh xạ vào một Kernel Thread. Việc quản lý được mô hình user level, khi có một thread bị block thì toàn bộ các Process cũng bị block theo.
* Mô hình One - to - One là mỗi User level thread được gắn với một Kernel Thread. Khi có một user thread mới được tạo ra thì cũng cần tạo một Kernel Thread tương ứng, lúc này chi phí quá lớn.
* Mô hình Many - to - Many nhiều User level thread được phân chia ánh xạ vào một số Kernel Thread. Tránh được các khuyết điểm của 2 mô hình trên.
avatar
LeMInhTien(I11C)

Tổng số bài gửi : 40
Join date : 07/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Tìm hiểu về luồng trong ngôn ngữ C++

Bài gửi  ThanhThao04(I11C) on 15/10/2011, 15:47

Nhận tiện đang học bài Luồng nên mình nói một ví dụ tí xíu về luồng trong lập trình C++ các bạn tham khảo nhé!
Trong C++: Để nhập giá trị cho 1 biến int x ta viết code như sau:
Code: cin>>x;
- "cin”là 1 luồng nhập chuẩn (Standard Input Stream) từ bàn phím, thứ mà ngôn ngữ C đã quy định sẵn.
- 2 dấu ">>" chính là định hướng luồng nhập đó sẽ đưa dữ liệu vào biến đi sau dấu >>.
=>”cin>>x”: Là nhập dữ liệu từ bàn phím vào biến x, vì chiều đi ra của luồng là hướng đến biến x
tương tự ”cin>>y”: Là nhập dữ liệu vào biến y, vì chiều đi ra của luồng là hướng đến biến y
Từ đó cho ta thấy bản chất của C++ đã sử dụng luồng để nhập liệu.

avatar
ThanhThao04(I11C)

Tổng số bài gửi : 34
Join date : 31/08/2011
Đến từ : Phú Yên

Xem lý lịch thành viên

Về Đầu Trang Go down

Tổng quan về Tiến trình và luồng

Bài gửi  DangMinhQuang(I11C) on 17/10/2011, 13:51

Chào mọi người !!
Như mọi người đã đọc tài liệu khái niệm về Tiến trình và Luồng. Bài viết này mình chỉ tóm gọn lại theo những điều mà mình hiểu để chia sẻ với mọi người. Nếu có gì chưa đúng hãy góp ý mạnh tay nhé.

Một tiến trình là một tập hợp của các dòng lệnh, dữ liệu, bộ nhớ ảo và tài nguyên hệ thống.
Một luồng là mã dùng để thực thi một tiến trình
Một bộ xử lý dùng để thực thi nhiều luồng, không thực thi nhiều tiến trình, cũng như trong mỗi ứng dụng có ít nhất một tiến trình và một tiến trình luôn luôn có ít nhất một luồng để thực thi. Được gọi là một luồng chính.
Một tiến trình có nhiều luồng trong một luồng chính

Khi một luồng bắt đầu thực thi, nó sẽ tiếp tục làm cho đến khi kết thúc công việc hoặc cho đến khi nó bị giáng đoạn bởi một sự ưu tiên cao hơn (được yêu cầu bởi người dùng hoặc kế hoạch đã được cài đặt sẵn). Mỗi luồng có thể chạy các mã riêng biệt, hoặc nhiều luồng có thể cùng thực thi một đoạn mã.

Lên lịch cho luồng xác định khi nào và làm thế nào thường xuyên để thực hiện một luồng, theo một sự kết hợp của thuộc tính ưu tiên của lớp tiến trình và độ ưu tiên của luồng cơ bản . Bạn có thể thiết lập thuộc tính ưu tiên của một lớp tiến trình bằng cách gọi hàm SetPriorityClass, và bạn cài đặt độ ưu tiên cơ bản của một luồng với một cuộc gọi đến SetThreadPriority.

Ứng dụng đa luồng phải tránh hai vấn đề luồng: đình trệ công việc và xung đột. Một đình trệ công việc xảy ra khi mỗi luồng đang chờ đợi người khác làm điều gì đó. Việc kiểm soát cuộc gọi COM giúp ngăn chặn sự đình trệ trong các cuộc gọi giữa các đối tượng. Một điều kiện xung đột xảy ra khi một luồng kết thúc trước khác mà trên đó nó phụ thuộc, gây ra việc sử dụng một giá trị không đúng bởi vì sau này đã không cung cấp một giá trị. COM cung cấp một số chức năng đặc biệt thiết kế để giúp tránh điều kiện xung đột trong Tiến trình của máy chủ.

Ưu điểm là gì?
Thời gian chuyển đổi giữa các luồng ít hơn hẳn so với giữa các quá trình vì không cần phải chuyển đổi không gian địa chỉ. Ngoài ra, vì chúng chia sẻ không gian địa chỉ nên các luồng trong một quá trình có thể giao tiếp với nhau dễ dàng hơn nhiều.
Trên máy tính có nhiều bộ xử lý, chương trình dạng một quá trình đơn chỉ chạy trên một CPU, còn chương trình dạng luồng có thể chia các luồng cho tất cả các bộ xử lý. Vì thế, nếu bạn chuyển chương trình dạng luồng sang máy chủ nhiều bộ xử lý thì nó sẽ chạy nhanh hơn.

Khuyết điểm?
Chương trình dạng luồng khó viết và kiểm lỗi hơn. Không phải mọi thư viện lập trình đều được thiết kế để dùng với luồng và không phải mọi ứng dụng cũ đều có thể làm việc tốt với ứng dụng dạng luồng. Một vài công cụ lập trình cũng làm cho việc thiết kế và thử nghiệm mã luồng khó khăn hơn.
Lỗi liên quan đến luồng cũng khó phát hiện hơn. Các luồng trong một quá trình có thể bị chồng chéo dữ liệu với nhau. Hệ điều hành có thể hạn chế số luồng thực thi chẳng hạn đọc và ghi dữ liệu cùng lúc. Việc định thời cho các luồng khác nhau để tránh xung đột là rất khó khăn.
Tuy nhiên, khi các ứng dụng dùng chung phức tạp và máy chủ nhiều bộ xử lý ngày càng phổ biến thì luồng sẽ ngày càng được dùng nhiều để thực hiện đa xử lý.

DangMinhQuang(I11C)

Tổng số bài gửi : 9
Join date : 05/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Ví dụ Lập trình đa luồng dễ hơn lập trình đa tiến trình

Bài gửi  ThanhThao04(I11C) on 18/10/2011, 22:42

Mình nêu ví dụ để minh họa ích lợi thứ 5 của công nghệ đa luồng để các bạn hiểu rõ vấn đề hơn.
Ví Dụ về Đa Luồng Và Đa Tiến Trình:
Ví dụ 1:
Ví Dụ Về Đa luồng: Trong một ngôi nhà phân ra 2 luồng phòng khác nhau, có chung trần nhà, không tách biệt lập với nhau. Nhưng 2 luồng phòng này dùng chung một tài nguyên là máy điều hòa.
Ví Dụ về Đa Tiến Trình: Mỗi phòng trong nhà là 1 tiến trình, 2 phòng tách biệt nhau, 2 phòng không thể dùng chung một máy điều hòa.
=>Lập trình đa luồng dễ hơn lập trinh đa tiến trình -> Một máy điều hòa chia ra nhìu luồng phòng tiết kiệm hơn là mỗi phòng 1 máy điều hòa.
Ví dụ 2:
•Ví Dụ Về Đa luồng:Trên 1 con đường có thể phân ra nhìu luồng xe khác nhau Nhưng các luồng dùng chung một tài nguyên là Mặt Đường.
•Ví Dụ về Đa Tiến Trình: Mỗi con đường là 1 tiến trính, 2 con đường riêng biệt không thể dùng chung một mặt đường.
=>Lập trình đa luồng dễ hơn lập trinh đa tiến trình: -> Xây 1 con đường phân ra nhìu luồng xe chạy dễ hơn, tiết kiệm hơn là xây nhìu con đường.


avatar
ThanhThao04(I11C)

Tổng số bài gửi : 34
Join date : 31/08/2011
Đến từ : Phú Yên

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  BuiVanHoc(I11C) on 20/10/2011, 00:01

PhamHuyHoang (I11C) đã viết:Mình chưa biết nhiều ứng dụng của bài "Nhà sản xuất - tiêu thụ" trong thực tế. Xin các bạn giúp đỡ, thanks!

Theo mình có thể lấy ví dụ trong thực tế về việc viết phần mềm quản việc đỗ xe tại bến xe miền đông là một ví dụ: Khi chỗ đậu xe trong bến đã đầy thì không còn chỗ cho xe khác vào và các xe đó phải chờ khi nào xe trong bến xuất bến đo nơi khác mới có chỗ trống để vào.. hi hi, ví dụ mình lấy đơn giản quá, trong thực tế bạn cứ thử suy nghĩ xem có rất nhiều ứng dụng trong thực tế mà cần phải áp dụng thuật toán này: quan ly sản xuất của một cty hay quản lý rạp chiếu phim....
avatar
BuiVanHoc(I11C)

Tổng số bài gửi : 32
Join date : 26/08/2011
Age : 34
Đến từ : Ho Chi Minh City

Xem lý lịch thành viên http://csc.com.vn

Về Đầu Trang Go down

Giới Thiệu Sơ Lược Về Henry Laurence Gantt (1861-1919)

Bài gửi  lamhuubinh(I91C) on 20/10/2011, 15:17

Biểu Đồ Gantt

Một biểu đồ thời gian tuyến tính trên đó các mục tiêu hiệu suất đã định được đánh dấu, cho phép sự tiến triển thực tế được đối chiếu với các mục tiêu. (Đặt tên theo Henry Laurence Gantt, người phát minh biểu đồ này năm 1917.).


Bằng cách phát triển hệ thống và các công cụ quản lý để cải thiện quy hoạch, hiệu quả và năng suất lao động tổng thể của, Henry Gantt thay đổi cách thức các công trình trên thế giới.

Là một nhà tư vấn quản lý kinh doanh tiên phong, Gantt nhấn mạnh trách nhiệm của doanh nghiệp để lao động và nghĩa vụ của mình cho xã hội. Là một kỹ sư cơ khí, ông chủ trương một cách tiếp cận khoa học để hiệu quả công nghiệp. Các quá trình và các công cụ ông đã tạo ra vẫn còn cần thiết cho thế giới kinh doanh hiện đại của chúng tôi.

Sau khi nghiên cứu kỹ thuật tại Đại học Johns Hopkins, ông làm việc như một giáo viên và vẽ đồ án. Trong năm 1887, ông đảm nhận vị trí với Bethlehem Steel, ở đâu, phối hợp với Frederick Taylor, ông đã đạt được một sự hiểu biết tốt hơn về sự phụ thuộc lẫn nhau của quá trình sản xuất và nâng cao các lý thuyết về quản lý khoa học.

Trong thời gian này, Gantt đã phát triển các biểu đồ mang tên ông, cho phép lập kế hoạch và giám sát hiệu quả hơn. Gantt của cải tiến cho ngành công nghiệp quan trọng trong các dự án cơ sở hạ tầng quy mô lớn như đập Hoover và hệ thống đường cao tốc quốc gia của chúng tôi. Mỗi năm, Hiệp hội kỹ sư cơ khí Hoa Kỳ giải thưởng huy chương danh dự của Henry Gantt.

lamhuubinh(I91C)

Tổng số bài gửi : 34
Join date : 28/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Tập Luồng Trong Java

Bài gửi  lamhuubinh(I91C) on 24/10/2011, 17:53

TẬP LUỒNG TRONG JAVA

*Luồng Byte và Luồng ký tự:
Java định nghĩa 2 luồng: Luồng Byte(byte stream) và luồng ký tự(character stream).

-Luồng byte dùng nhập xuất dữ liệu dạng byte. Luồng byte thường sử dụng nhất.
Ví dụ: việc đọc/viết dữ liệu nhị phân.
+Luồng byte thừa kế từ 2 lớp trừu trượng: InputStream và OutputStream.

-Luồng ký tự dùng cho việc nhập xuất các ký tự theo bảng mã Unicode. Vì vậy có thể dễ dàng quốc tế hóa chương trình. Ngoài ra trong vài trường hợp khác, luồng ký tự hiệu quả hơn luồng byte.
Luồng ký tự thừa kế từ hai lớp trừu tượng Reader và Writer.

Các luồng chuẩn của Java:
-System.out là luồng xuất chuẩn, mặc định là màn hình(console)
-System.in là luồng nhập chuẩn, mặc định là bàn phím.
-System.err là luồng lổi chính, mặc định là màn hình

*System.in là đối tượng của InputStream
*System.out và System.err là những đối tượng của PrintStream. Các luồng này đều là byte dùng đọc viết ký tự

lamhuubinh(I91C)

Tổng số bài gửi : 34
Join date : 28/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

MO HINH DA LUONG

Bài gửi  LeThiThuyDuong (I11C) on 24/10/2011, 22:02

Khái niệm:
-Luồng:còn gọi là tiến trình nhẹ,một đơn vị cơ bản sử dụng CPU .
-Luồng cũng có thông tin trạng thái như tiến trình truyền thống.
-Tiến trình có thể có một luồng chính va nhiều luồng phụ.Mỗi luồng có khả năng chia sẽ tài nguyên với các luồng khác trong tiến trình.
-nhiều luồng có thể cùng chung một mã chương trình.
Ích lợi của đa luồng:
-Khả năng đáp ứng tốt hơn: nhờ có lợi ích nay ma người dùng tương tác với máy tính dễ dàng hơn.Nếu như luồng này bận thi có thể tương tác với luồng khác để xử lý.
-Chia sẽ tài nguyên :tho mặc định ,các luồng có thể dùng chung 1 bộ nhớ va tài nguyên của luồng cha.Vài luồng vận hành trong cùng 1 vùng địa chỉ.
-Tiết kiệm: Do luồng dùng chung tài nguyên vớ cha và các luồng khác
* Mô hình nhiều-một
Mô hình nhiều-một (như hình IV.2) ánh xạ nhiều luồng cấp người dùng tới
một luồng cấp nhân. Quản lý luồng được thực hiện trong không gian người dùng vì
thế nó hiệu quả nhưng toàn bộ quá trình sẽ bị khóa nếu một luồng thực hiện lời gọi hệ
thống khóa. Vì chỉ một luồng có thể truy xuất nhân tại một thời điểm nên nhiều luồng
không thể chạy song song trên nhiều bộ xử lý. Green threads-một thư viện luồng được
cài đặt trên các hệ điều hành không hỗ trợ luồng nhân dùng mô hình nhiều-một.
Mô hình một-một
Mô hình một-một (hình IV.3) ánh xạ mỗi luồng người dùng tới một luồng
nhân. Nó cung cấp khả năng đồng hành tốt hơn mô hình nhiều-một bằng cách cho một
luồng khác chạy khi một luồng thực hiện lời gọi hệ thống nghẽn; nó cũng cho phép
nhiều luồng chạy song song trên các bộ xử lý khác nhau. Chỉ có một trở ngại trong
mô hình này là tạo luồng người dùng yêu cầu tạo một luồng nhân tương ứng. Vì chi
phí cho việc tạo luồng nhân có thể đè nặng lên năng lực thực hiện của ứng dụng, các
cài đặt cho mô hình này giới hạn số luồng được hỗ trợ bởi hệ thống. Windows NT,
Windows 2000 và OS/2 cài đặt mô hình một-một này.
*Mô hình nhiều-nhiều
Mô hình nhiều-nhiều (như hình VI.4) đa hợp nhiều luồng cấp người dùng tới
số lượng nhỏ hơn hay bằng các luồng nhân. Số lượng các luồng nhân có thể được xác
định hoặc một ứng dụng cụ thể hay một máy cụ thể (một ứng dụng có thể được cấp
nhiều luồng nhân trên một bộ đa xử lý hơn trên một bộ đơn xử lý). Trong khi mô hình
nhiều-một cho phép người phát triển tạo nhiều luồng người dùng như họ muốn, thì
đồng hành thật sự là không đạt được vì nhân có thể lập thời biểu chỉ một luồng tại mộ
thời điểm. Mô hình một-một cho phép đồng hành tốt hơn nhưng người phát triển phải
cẩn thận không tạo ra quá nhiều luồng trong một ứng dụng. Mô hình nhiều-nhiều gặp
phải một trong hai vấn đề khiếm khuyết: người phát triển có thể tạo nhiều luồng
người dùng khi cần thiết và các luồng nhân tương ứng có thể chạy song song trên một
bộ đa xử lý.


[/quote]

LeThiThuyDuong (I11C)

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

GIỚI THIỆU VỀ Henry Laurence Gantt

Bài gửi  LeThiThuyDuong (I11C) on 24/10/2011, 22:06


Henry Laurence Gantt (sinh 1861 - mất 23 tháng 11 năm 1919) là một kĩ sư cơ khí và cố vấn dự án người Mỹ, nổi tiếng với việc phát triển sơ đồ Gantt năm 1910. Sơ đồ Gantt được sử dụng rộng rãi trong những công trình lớn như đập Hoover hay hệ thống đường quốc lộ liên bang Mỹ và ngày nay vẫn là một công cụ quan trọng trong quản lý dự án.
Henry Gantt sinh tại quận Calvert, Maryland, Hoa Kỳ. Ông tốt nghiệp trường McDonogh năm 1878 và trường cao đẳng Johns Hopkins rồi làm thầy giáo và người vẽ đồ án trước khi trở thành kĩ sư cơ khí. Năm 1887 ông cùng Frederick W. Taylor quản lý công ty thép Midvale và công ty thép Bethlehem cho đến năm 1893. Sau này, khi làm cố vấn dự án, ngoài sơ đồ Gantt, ông còn thiết kế hệ thống thưởng năng suất - trong đó nhân viên có năng suất vượt định mức sẽ được thưởng phần trăm. Ngoài ra, ông còn phát triển một số phương pháp đo đạc hiệu suất và năng suất nhân viên.
Henry Gantt đã có nhiều đóng góp cho môn khoa học quản lý, đáng nói nhất bao gồm:
 Sơ đồ Gantt: Đến ngày nay, sơ đồ Gantt vẫn được coi là một công cụ quản lý quan trọng. Sơ đồ Gantt biểu thị thời gian biểu của dự án dùng để quản lý, lên kế hoạch và kiểm soát tiến độ công việc trong dự án. PERT (Program Evaluation and Review Technique - Phương pháp ước lượng và xem xét chương trình) là một biến thể của sơ đồ Gantt.
 Hiệu suất công nghiệp: Hiệu suất công nghiệp có thể được nâng cao bằng cách phân tích một cách khoa học mọi khía cạnh của công việc. Công tác quản lý công nghiệp là cải tiến hiệu suất bằng cách hạn chế tối đa rủi ro.
 Hệ thống thưởng năng suất: Henry Gantt thưởng phần trăm quản lý viên tương ứng với năng suất vượt định mức nhân viên dưới quyền họ đạt được.
 Trách nhiệm xã hội của doanh nghiệp: Henry Gantt tin rằng doanh nghiệp phải có trách nhiệm với xã hội.

LeThiThuyDuong (I11C)

Tổng số bài gửi : 16
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Nguyên lý tập luồng

Bài gửi  tranleanhngoc88(i11c) on 25/10/2011, 20:54

Tập luồng (Thread Pools):
- Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
- Các luồng trong tập luồng luôn sẵn sàng chờ công việc.
- Khi tiến trình cha (ví dụ Web Server) nhận thêm một yêu cầu, một luồng được đánh thức và đưa vào vận hành.
- Phục vụ xong, luồng được đưa trả về tập luồng.
- Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.
avatar
tranleanhngoc88(i11c)

Tổng số bài gửi : 14
Join date : 30/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Những lợi ích của đa luồng

Bài gửi  PhamDuyPhuong87(I11C) on 27/10/2011, 14:07

- Khả năng đáp ứng
- Chia sẽ tài nguyên
- Tiết kiêm
- Tận dụng được thế mạnh của kiến trúc đa xử lý
Vd: Lập trình xử lý công việc bán vé máy bay, gửi và rút tiền ở ngân hàng đều cần đến công nghệ đa luồng.
Very Happy Smile Sad Surprised
avatar
PhamDuyPhuong87(I11C)

Tổng số bài gửi : 23
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Lập trình đa luồng trong windows

Bài gửi  PhamDuyPhuong87(I11C) on 27/10/2011, 14:21

Một luồng thường được gọi là quá trình nhẹ (lightweight proces-LWP), là một đơn vị cơ bản của việc sử dụng CPU; nó hình thành gồm: một định danh luồng (thread ID), một bộ đếm chương trình, tập thanh ghi và ngăn xếp. Nó chia sẻ với các luồng khác thuộc cùng một quá trình phần mã, phần dữ liệu, và tài nguyên hệ điều hành như các tập tin đang mở và các tín hiệu. Một quá trình truyền thống (hay quá trình nặng) có một luồng điều khiển đơn. Nếu quá trình có nhiều luồng điều khiển, nó có thể thực hiện nhiều hơn một tác vụ tại một thời điểm.
avatar
PhamDuyPhuong87(I11C)

Tổng số bài gửi : 23
Join date : 31/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Thảo luận bài 5

Bài gửi  HuynhVanNhut (I11C) on 28/10/2011, 16:12

+ Nguyên lý tập luồng và ứng dụng. Cho ví dụ minh họa
- Tiến trình cha tạo lập sẵn một tập luông khi khởi động.
- Các luồng trong tập luồng luôn sẵn sàng chờ công việc
- Khi tiến trình cha (ví dụ cho Web Server) nhận thêm một yêu cầu, một luông được đánh thức và đưa vào vận hành.
- Phục vụ xong, luồng được đưa trả về tập luồng.
- Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình cha chờ đến khi có luồng được giải phóng.
+ Ví dụ:
Trong một doanh trại quân đội sẽ có một tướng lĩnh (tiến trình cha) và sẽ có 1 đội binh (tập luồng). Đội binh này sẽ sẵn sàng chiến đấu khi có mệnh lệnh (sẵn sàng chờ công việc).
Khi có 1 tên địch đột nhập (nhận thêm một yêu cầu). Tướng lĩnh sẽ điều binh sĩ 1 (1 luồng) đi bắt tên địch (một luông được đánh thức và đưa vào vận hành).
Trong khi đó, lại có thêm một tên địch khác đột nhập (nhận thêm một yêu cầu khác), tướng lĩnh sẽ điều binh sĩ 2 (một luồng) đi bắt địch (một luông được đánh thức và đưa vào vận hành). Sau khi bắt địch xong, binh sĩ sẽ trở về doanh trại (luồng đươc trả về tập luồng).

HuynhVanNhut (I11C)

Tổng số bài gửi : 12
Join date : 07/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Tạo thread với visual C

Bài gửi  LeMinhDuc (I11C) on 1/11/2011, 15:56

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

DWORD ThreadProc (LPVOID lpdwThreadParam );

//Global variable Shared by all threads
int nGlobalCount = 0;
//Main function which starts out each thread
int __cdecl main( int argc, char **argv)
{
int i, nThreads = 5;
DWORD dwThreadId;
//Determine the number of threads to start
if (argc > 1) {
nThreads = atoi( argv[1]);
}

//Set the global count to number of threads
nGlobalCount = nThreads;
//Start the threads
for (i=1; i<= nThreads; i++) {
//printf("i - %d\n",i);
if (CreateThread(NULL, //Choose default security
0, //Default stack size
(LPTHREAD_START_ROUTINE)&ThreadProc,
//Routine to execute
(LPVOID) &i, //Thread parameter
0, //Immediately run the thread
&dwThreadId //Thread Id
) == NULL)
{
printf("Error Creating Thread#: %d\n",i);
return(1);
}
else
{
printf("Global Thread Count: %d %d %d\n", nGlobalCount, nThreads, i);
Sleep(1000);
}
}
return 0;
}

//Thread Routine
DWORD ThreadProc (LPVOID lpdwThreadParam )
{
//Print Thread Number
printf ("Thread #: %d\n", *((int*)lpdwThreadParam));
//Reduce the count
nGlobalCount--;
//ENd of thread
return 0;
}

LeMinhDuc (I11C)

Tổng số bài gửi : 39
Join date : 26/08/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  nguyenduc_gia.18(I11c) on 3/11/2011, 09:04

minhgiangbc đã viết:
DaoQuangSieu (I11C) đã viết:
DoThuyTien16 (I11C) đã viết:Tập luồng (Thread Pools):
• Tiến trình cha tạo lập sẵn một tập luồng khi khởi động.
• Các luồng trong tập luông luôn sẵn sàng chờ công việc.
• Khi tiến trình cha (ví dụ Web server) nhận thêm một yêu cầu, một luồng được đánh thức và đưa vào vận hành.
• Phục vụ xong luồng được đưa trả về tập luồng.
• Nếu số yêu cầu lớn hơn số luồng trong tập, tiến trình ch chờ cho đến khi có luồng được giải phóng.
Ví dụ:Trong mộ doanh trại quân đội sẽ có một tướng lĩnh (tiến trình cha) và sẽ có một đội binh( tập luồng).
Đội binh này sẽ sẵn sàng chiến đấu khi có mệnh lệnh(sẵn sàng chờ công việc ).
Khi có một tên địch đột nhập, tướng lĩnh sẽ điều binh lính 1(một luồng) đi bắt tên địch( một luồng được đánh thức và đưa vào vận hành).
Trong khi đó, lại có thêm một tên địch khác đột nhập ( nhận thêm một yêu cầu), Tướng lĩnh sẽ điều binh sĩ 2 (một luồng) đi bắt địch (một luồng được đánh thức và đưa vào vận hành).
Su khi bắt địch xong ,binh sĩ sẽ trở về doanh trại ( luồng được trả về tập luồng).
*Hầu hết các bạn đều trình bày đúng cái ví dụ mà hôm qua Thầy đã nói,mình xin đưa ra 1 ví dụ thực tiễn nữa là :
Trong một buỗi kiểm tra bài cũ thì giáo viên và những học sinh phía dưới (được gọi là 1 tập luồng) sẽ diễn ra như sau:
-Các học sinh phía dưới đã chuẩn bị bài cũ và sẵn sàng "chiến đấu",lúc này các học sinh đang trong trạng thái đợi.
-Khi các giáo viên gọi bất kỳ một học sinh nào, thì ngay tức khắc học sinh đó sẽ lên bảng trả bài hoặc làm bài tập...
-Khi các học sinh đó hoàn thành xong "công việc" của mình thì học sinh đó trở về vị trí cũ đợi tiếp và Giáo viên sẽ tiếp tục gọi học sinh tiếp theo.
*Các Luồng (học sinh) luôn trong trạng thái chờ và sẽ được đánh thức đưa vào vận hành.
thanks bạn nhìu,những ví dụ như thế này rất bổ ích
cảm ơn bạn rất là nhiều , nhờ bạn mình hiểu hơn về nó

nguyenduc_gia.18(I11c)

Tổng số bài gửi : 22
Join date : 07/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  PhamThiHoa-I91C on 8/11/2011, 10:16

Admin đã viết:Thảo luận những vấn đề liên quan đến Bài 5 (Đa luồng).
Mấy bạn lớp mình tranh thủ post bài nhiều bài rất hay, mình đã đọc hết nguyên cái topic để tìm một số code mình chưa hiều, rồi hỏi các bạn thêm, nhưng đọc hết tất cả thì cuối cùng mình cũng tìm ra điều mình muốn tìm, nhưng sao các bạn không đọc hết topic rồi hãy post bài, nhiều bài trùng quá trời, nhưng không sao đọc hết topic là mình nhớ bài luôn(vì cứ lập đi lập lại mà).

PhamThiHoa-I91C

Tổng số bài gửi : 29
Join date : 16/09/2011

Xem lý lịch thành viên

Về Đầu Trang Go down

Re: Thảo luận Bài 5 (Đa luồng)

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Trang 5 trong tổng số 6 trang Previous  1, 2, 3, 4, 5, 6  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết