Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng
Trang 1 trong tổng số 1 trang
Thực thi vấn đề sản xuất - tiêu thụ áp dụng đa luồng
Chào thầy và các bạn,
Về bài toán Sản xuất và Tiêu thụ áp dụng đa luồng em xin có ý kiến:
- Đối với vấn đề nhà Tiêu thụ(Consumer): khi trường hợp 2 con trỏ cur_in và cur_out bằng nhau, chương trình sẻ quẩn quanh ở vòng lặp while. Việc quẩn quanh vòng lặp này tốn rất nhiều tài nguyên CPU(em thử và thấy CPU luôn chạy 100%), trong khi trên thực tế trạng thái chờ này thường chiếm đa số thời gian làm việc của một tiến trình, vì không phải lúc nào củng có hàng do nhà sản xuất cung cấp để xử lý. Do đó em nghỉ nên cần có phương án để giảm tải cho CPU trong trường hợp này.
- Hiện tại thì em dùng thủ thuật nhỏ là : trong trường hợp cur_in và cur_out bằng nhau thì cho luồng đó tạm ngủ(Sleep) trong một khoảng thời gian nhất định, sau khoản thời gian đó sẻ tiếp tục tiến trình như củ. Qua thử nghiệm thì thấy CPU giảm tải được khá nhiều, không còn trường hợp 100% liên tục nữa.
Mong thầy và các bạn góp ý thêm...
Xin cảm ơn
Về bài toán Sản xuất và Tiêu thụ áp dụng đa luồng em xin có ý kiến:
- Đối với vấn đề nhà Tiêu thụ(Consumer): khi trường hợp 2 con trỏ cur_in và cur_out bằng nhau, chương trình sẻ quẩn quanh ở vòng lặp while. Việc quẩn quanh vòng lặp này tốn rất nhiều tài nguyên CPU(em thử và thấy CPU luôn chạy 100%), trong khi trên thực tế trạng thái chờ này thường chiếm đa số thời gian làm việc của một tiến trình, vì không phải lúc nào củng có hàng do nhà sản xuất cung cấp để xử lý. Do đó em nghỉ nên cần có phương án để giảm tải cho CPU trong trường hợp này.
- Hiện tại thì em dùng thủ thuật nhỏ là : trong trường hợp cur_in và cur_out bằng nhau thì cho luồng đó tạm ngủ(Sleep) trong một khoảng thời gian nhất định, sau khoản thời gian đó sẻ tiếp tục tiến trình như củ. Qua thử nghiệm thì thấy CPU giảm tải được khá nhiều, không còn trường hợp 100% liên tục nữa.
- Code:
const int BUFFER_SIZE = 10;
static int[] buffer = new int[BUFFER_SIZE];
static int cur_in = 0;
static int cur_out = 0;
public static void Consumer()
{
int nextConsumed;
while (true)
{
while (cur_in == cur_out)
Thread.Sleep(500);// cho luồng ngủ trong 500 mili giây
nextConsumed = buffer[cur_out];
cur_out = (cur_out + 1) % BUFFER_SIZE;
// ... Tiêu Thụ (nextConsumed)
}
}
Mong thầy và các bạn góp ý thêm...
Xin cảm ơn
HuynhTrungLoi-I11C- Tổng số bài gửi : 27
Join date : 05/09/2011
Similar topics
» Ứng dụng Bài toán SX-TT 2 đèn hiệu để tạo ra 50 luồng sản xuất, tiêu thụ thực thi tự động
» Thực thi vấn đề sản xuất và tiêu thụ
» Thực thi vấn đề sản xuất và tiêu thụ
» Thảo luận Bài 7
» Tạo một tập luồng gồm 100 nhà sản xuất và 50 nhà tiêu thụ
» Thực thi vấn đề sản xuất và tiêu thụ
» Thực thi vấn đề sản xuất và tiêu thụ
» Thảo luận Bài 7
» Tạo một tập luồng gồm 100 nhà sản xuất và 50 nhà tiêu thụ
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết