Thảo luận Bài 5
+48
PhamHuyHoang(I113A)
TranMinhNhat61 (102c)
lebichtram89 (113a)
trinhquangtrong91 (113a)
PhanDiecLoi34 (113A)
CaoTheAnh01(113A)
nguyenduchuy19 (113A)
LUUDINHTOAN(I11C)
LeKimHoang (113A)
TrangSiMinhHai (113A)
ngongocdiep06 (113A)
NguyenVanNghiem(HC11TH3A)
tranthanhphu49 (113A)
LamVuThai (113A)
LeDangBaoNgoc55 (113A)
NguyenVuLinh12053_I11C
VuMinhTan (113A)
NguyenThiKimNgan (113A)
TranThiHuyenTrang(113A)
NguyenVanNgoc65 (113A)
dothanhnhan44 (113A)
nguyendinhhieu13 (113A)
NguyenHuuNghiep72
HoThienLang27 (113A)
voanhvy (113A)
nguyenchithuc(113A)
LeThanhNhan45 (113A)
MaiTrieuHung16 (113A)
NguyenPhamTanPhat(113A)
DangThiKimKhanh (113A)
ledinhngankhanh (113a)
TranThichThem (113A)
NguyenVanQuyet57 (113A)
TranThiThuyHang79 (113A)
trantrungnam-HC11TH2A
lechaukhoa(113A)
NguyenHuuLinh31(113A)
NguyenTrungTruc (113A)
NguyenVanLam(I13A)
PhamQuocAnh02 (113A)
NguyenThiNgocPhuong(113A)
NguyenNgocTrungNam (113A)
buidainghia(113A)
LeLamThang (113A)
NguyenThiThuThuy (113A)
HaHoangCongTien80 (113A)
phamanhtuan95(113A)
Admin
52 posters
Trang 3 trong tổng số 9 trang
Trang 3 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Ví dụ về tính ưu việt của công nghệ "đa luồng".
* Chia sẻ tài nguyên: các luồng có thể dùng chung tài nguyên và bô nhớ 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 dùng chung tài nguyên hơn so với trường hợp đa tiến trình.
VD: các bạn sinh viên thuê cùng phòng thì dễ dàng chia sẻ bóng đèn, quạt máy và tivi với nhau. Còn trường hợp hai, ba phòng trọ xài chung 1 quạt máy, 1 tivi thì chúng ta thấy việc chia sẻ, dùng chung quả là khó khăn hơn, phiền toái hơn.
*Tiết kiệm: 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 dùng chung tài nguyên với cha và các luồng khác nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
VD: trong 1 gia đình có người con trai lớn lập gia đình.Vấn đề cần thiết bây giờ là 1 chỗ ở riêng cho cặp vợ chồng này. Và rõ ràng chúng ta thấy nếu mua nhà ra ở riêng thì rất tốn kém so với ngăn ra 1 phòng trong nhà để ở. Vì khi mua nhà thì chi fí mua nhà cao hơn và tất cả vật dụng trong nhà sẽ phải sắm sửa lại từ đầu chứ không xài chung trong gia đình như trước nữa.
.
VD: các bạn sinh viên thuê cùng phòng thì dễ dàng chia sẻ bóng đèn, quạt máy và tivi với nhau. Còn trường hợp hai, ba phòng trọ xài chung 1 quạt máy, 1 tivi thì chúng ta thấy việc chia sẻ, dùng chung quả là khó khăn hơn, phiền toái hơn.
*Tiết kiệm: 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 dùng chung tài nguyên với cha và các luồng khác nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
VD: trong 1 gia đình có người con trai lớn lập gia đình.Vấn đề cần thiết bây giờ là 1 chỗ ở riêng cho cặp vợ chồng này. Và rõ ràng chúng ta thấy nếu mua nhà ra ở riêng thì rất tốn kém so với ngăn ra 1 phòng trong nhà để ở. Vì khi mua nhà thì chi fí mua nhà cao hơn và tất cả vật dụng trong nhà sẽ phải sắm sửa lại từ đầu chứ không xài chung trong gia đình như trước nữa.
.
MaiTrieuHung16 (113A)- Tổng số bài gửi : 48
Join date : 17/07/2012
Tại sao lập trình đa luồng dễ hơn lập trình đa tiến trình ?
Tại sao lập trình đa luồng dễ hơn lập trình đa tiến trình ?
.
.
MaiTrieuHung16 (113A)- Tổng số bài gửi : 48
Join date : 17/07/2012
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.
NguyenHuuNghiep72- Tổng số bài gửi : 1
Join date : 14/08/2012
Công Nghệ CGI
Hôm bửa thầy có nhắc tới công nghệ CGI nên mình có bài viết nói về công nghệ này.
Định nghĩa: Common Gateway Interface (CGI) là chuẩn để kết nối chương trình ứng dụng với Web server. Dữ liệu từ bảng biểu do người dùng điền vào trên trang Web được chuyển cho ứng dụng CGI, ứng dụng này sau đó sẽ gửi trả nội dung Web được tạo ra theo yêu cầu ngược về cho trình duyệt của người dùng.
Khi được phát triển lần đầu tiên cách đây một thập kỷ, World Wide Web được thiết kế để hiển thị tài liệu. Tuy nhiên, ngay từ lúc khởi đầu, các nhà phát triển Web site đã muốn có một cách thức để gửi dữ liệu từ trình duyệt của người dùng lên Web server, chẳng hạn tên, mật mã người dùng hay yêu cầu tìm kiếm.
CGI mang lại một phương thức chuẩn hoá để thực hiện những khả năng này. Khi người dùng gõ dữ liệu vào bảng biểu trên trang Web, nội dung này sẽ được gửi về cho Web server và thông qua giao tiếp CGI để đưa đến những chương trình riêng biệt xử lý.
Chương trình CGI sau đó có thể gửi ngược về cho trình duyệt của người dùng trang Web hiện có, trang Web mới được sinh ra trong quá trình xử lý, hình ảnh hay bất kỳ loại thông tin nào khác có thể hiển thị được trên trình duyệt.
Vì CGI hết sức linh động nên hầu như bất kỳ chương trình nào có thể chạy trên máy chủ Web và chấp nhận dữ liệu theo kiểu dòng lệnh như những chương trình được viết bằng C, C++, Perl, Visual Basic và thậm chí một số ngôn ngữ kiểu dòng lệnh của Unix - đều có thể dùng được với CGI.
Một trong những tồn tại lớn nhất của CGI là nó nạp một chương trình mới mỗi khi người dùng nhấn vào bảng biểu, vì thế những máy chủ Web dùng cho site có dòng lưu chuyển dữ liệu lớn có thể chạy hàng ngàn chương trình cùng lúc - một gánh nặng cho tốc độ của Web site.
Những chương trình chuyên biệt
Người dùng thường phàn nàn những chương trình được viết cho CGI không thể dùng lại được khi Web site thay đổi vì chúng thường rất chuyên dụng. Kết quả là trong một số năm qua, nhiều Web site lớn đã từ bỏ CGI để đi theo các máy chủ ứng dụng. Tương tự các chương trình CGI, máy chủ ứng dụng chấp nhận nhập liệu từ phía người dùng và gửi ngược lại các trang Web hay thông tin khác. Điều khác biệt là máy chủ ứng dụng xử lý nhập liệu của nhiều người dùng chỉ bằng một chương trình, do đó cải thiện tốc độ rất nhiều.
Hết sức thích hợp
Điều này không có nghĩa máy chủ ứng dụng sẽ thích hợp cho tất cả mọi người. CGI rất phù hợp với các mạng nội bộ, nơi thường có lưu lượng thông tin ít hơn những site bên ngoài. Hơn nữa, kinh phí của các phòng ban thường không chấp nhận mức giá 15.000 - 100.000 USD của máy chủ ứng dụng, trong khi CGI thì được thiết kế sẵn trong các máy chủ Web.
Chương trình CGI có thể được viết bằng bất kỳ ngôn ngữ nào và giao tiếp CGI cũng hết sức đơn giản, vì thế các nhà phát triển Web có thể nhanh chóng kết hợp những tiện ích CGI đơn giản với nhau. Tất cả những điều này làm cho CGI trở thành công cụ thực dụng cho những tiện ích và sửa đổi mang tính tức thời nhưng không thể dùng được trên những Web site thương mại đòi hỏi cao. CGI vẫn có vai trò hết sức quan trọng nhưng ngày càng có nhiều phương thức khác uyển chuyển hơn, hoàn thiện hơn để tích hợp với những hệ thống khác.
Định nghĩa: Common Gateway Interface (CGI) là chuẩn để kết nối chương trình ứng dụng với Web server. Dữ liệu từ bảng biểu do người dùng điền vào trên trang Web được chuyển cho ứng dụng CGI, ứng dụng này sau đó sẽ gửi trả nội dung Web được tạo ra theo yêu cầu ngược về cho trình duyệt của người dùng.
Khi được phát triển lần đầu tiên cách đây một thập kỷ, World Wide Web được thiết kế để hiển thị tài liệu. Tuy nhiên, ngay từ lúc khởi đầu, các nhà phát triển Web site đã muốn có một cách thức để gửi dữ liệu từ trình duyệt của người dùng lên Web server, chẳng hạn tên, mật mã người dùng hay yêu cầu tìm kiếm.
CGI mang lại một phương thức chuẩn hoá để thực hiện những khả năng này. Khi người dùng gõ dữ liệu vào bảng biểu trên trang Web, nội dung này sẽ được gửi về cho Web server và thông qua giao tiếp CGI để đưa đến những chương trình riêng biệt xử lý.
Chương trình CGI sau đó có thể gửi ngược về cho trình duyệt của người dùng trang Web hiện có, trang Web mới được sinh ra trong quá trình xử lý, hình ảnh hay bất kỳ loại thông tin nào khác có thể hiển thị được trên trình duyệt.
Vì CGI hết sức linh động nên hầu như bất kỳ chương trình nào có thể chạy trên máy chủ Web và chấp nhận dữ liệu theo kiểu dòng lệnh như những chương trình được viết bằng C, C++, Perl, Visual Basic và thậm chí một số ngôn ngữ kiểu dòng lệnh của Unix - đều có thể dùng được với CGI.
Một trong những tồn tại lớn nhất của CGI là nó nạp một chương trình mới mỗi khi người dùng nhấn vào bảng biểu, vì thế những máy chủ Web dùng cho site có dòng lưu chuyển dữ liệu lớn có thể chạy hàng ngàn chương trình cùng lúc - một gánh nặng cho tốc độ của Web site.
Những chương trình chuyên biệt
Người dùng thường phàn nàn những chương trình được viết cho CGI không thể dùng lại được khi Web site thay đổi vì chúng thường rất chuyên dụng. Kết quả là trong một số năm qua, nhiều Web site lớn đã từ bỏ CGI để đi theo các máy chủ ứng dụng. Tương tự các chương trình CGI, máy chủ ứng dụng chấp nhận nhập liệu từ phía người dùng và gửi ngược lại các trang Web hay thông tin khác. Điều khác biệt là máy chủ ứng dụng xử lý nhập liệu của nhiều người dùng chỉ bằng một chương trình, do đó cải thiện tốc độ rất nhiều.
Hết sức thích hợp
Điều này không có nghĩa máy chủ ứng dụng sẽ thích hợp cho tất cả mọi người. CGI rất phù hợp với các mạng nội bộ, nơi thường có lưu lượng thông tin ít hơn những site bên ngoài. Hơn nữa, kinh phí của các phòng ban thường không chấp nhận mức giá 15.000 - 100.000 USD của máy chủ ứng dụng, trong khi CGI thì được thiết kế sẵn trong các máy chủ Web.
Chương trình CGI có thể được viết bằng bất kỳ ngôn ngữ nào và giao tiếp CGI cũng hết sức đơn giản, vì thế các nhà phát triển Web có thể nhanh chóng kết hợp những tiện ích CGI đơn giản với nhau. Tất cả những điều này làm cho CGI trở thành công cụ thực dụng cho những tiện ích và sửa đổi mang tính tức thời nhưng không thể dùng được trên những Web site thương mại đòi hỏi cao. CGI vẫn có vai trò hết sức quan trọng nhưng ngày càng có nhiều phương thức khác uyển chuyển hơn, hoàn thiện hơn để tích hợp với những hệ thống khác.
Sự đồng bộ của luồng
Trong khi đang làm việc với nhiều luồng, nhiều hơn một luồng có thể muốn thâm nhập cùng một biến tại cùng thời điểm. Ví dụ, một luồng có thể cố gắng đọc dữ liệu, trong khi luồng khác cố gắng thay đổi dữ liệu. Trong trường hợp này, dữ liệu có thể bị sai.
Trong những trường hợp này, bạn cần cho phép một luồng hoàn thành trọn vẹn tác vụ của nó, và rồi thì mới cho phép các luồng kế tiếp thực thi. Khi hai hoặc nhiều hơn một luồng cần thâm nhập đến một tài nguyên được chia sẻ, bạn cần chắc chắn rằng tài nguyên đó sẽ được sử dụng chỉ bởi một luồng tại một thời điểm. Tiến trình này được gọi là "sự đồng bộ", (synchronization) được sử dụng để giải quyết vấn đề này, Java là ngôn ngữ duy nhất hổ trợ sự đồng bộ ở mức ngôn ngữ. Phương thức "đồng bộ" (synchronized) báo cho hệ thống đặt khóa trên tài nguyên.
Mấu chốt của sự đồng bộ hóa là khái niệm "monitor" (giám sát), hay còn gọi "semaphore" (cờ hiệu). Một "monitor" là một đối tượng mà được khóa độc quyền. Chỉ một luồng có thể có monitor tại mỗi thời điểm. Tất cả các luồng khác cố gắng thâm nhập vào monitor sẽ bị trì hoãn, cho đến khi luồng đầu tiên thoát khỏi monitor. Các luồng khác được báo chờ đợi monitor. Một luồng có thể monitor một đối tượng nhiều lần.
Trong những trường hợp này, bạn cần cho phép một luồng hoàn thành trọn vẹn tác vụ của nó, và rồi thì mới cho phép các luồng kế tiếp thực thi. Khi hai hoặc nhiều hơn một luồng cần thâm nhập đến một tài nguyên được chia sẻ, bạn cần chắc chắn rằng tài nguyên đó sẽ được sử dụng chỉ bởi một luồng tại một thời điểm. Tiến trình này được gọi là "sự đồng bộ", (synchronization) được sử dụng để giải quyết vấn đề này, Java là ngôn ngữ duy nhất hổ trợ sự đồng bộ ở mức ngôn ngữ. Phương thức "đồng bộ" (synchronized) báo cho hệ thống đặt khóa trên tài nguyên.
Mấu chốt của sự đồng bộ hóa là khái niệm "monitor" (giám sát), hay còn gọi "semaphore" (cờ hiệu). Một "monitor" là một đối tượng mà được khóa độc quyền. Chỉ một luồng có thể có monitor tại mỗi thời điểm. Tất cả các luồng khác cố gắng thâm nhập vào monitor sẽ bị trì hoãn, cho đến khi luồng đầu tiên thoát khỏi monitor. Các luồng khác được báo chờ đợi monitor. Một luồng có thể monitor một đối tượng nhiều lần.
Java – Đa luồng (Multithreading)
Một chương trình Java bị ngắt chỉ sau khi tất cả các luồng thực thi xong. Trong Java có hai loại luồng:
♦ Luồng người sử dụng.
♦ Luồng chạy ngầm (deamon).
Máy ảo Java có ít nhất một luồng deamon là luồng "garbage collection" (thu lượm tài nguyên - dọn rác). Luồng dọn rác thực thi chỉ khi hệ thồng không có tác vụ nào. Nó là một luồng có quyền ưu tiên thấp. Lớp luồng có hai phương thức để làm việc với luồng deamon:
♦ public void setDaemon(boolean on).
♦ public boolean isDaemon().
♦ Luồng người sử dụng.
♦ Luồng chạy ngầm (deamon).
Máy ảo Java có ít nhất một luồng deamon là luồng "garbage collection" (thu lượm tài nguyên - dọn rác). Luồng dọn rác thực thi chỉ khi hệ thồng không có tác vụ nào. Nó là một luồng có quyền ưu tiên thấp. Lớp luồng có hai phương thức để làm việc với luồng deamon:
♦ public void setDaemon(boolean on).
♦ public boolean isDaemon().
SỰ LIÊN LẠC GIỮA CÁC TIẾN TRÌNH(INTERPROCESS COMUNICATION)
1. Nhu cầu liên lạc giữa các tiến trình
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
Trong môi trường đa chương, một tiến trình không đơn độc trong hệ thống , mà có thể ảnh hưởng đến các tiến trình khác , hoặc bị các tiến trình khác tác động. Nói cách khác, các tiến trình là những thực thể độc lập , nhưng chúng vẫn có nhu cầu liên lạc với nhau để :
- Chia sẻ thông tin: nhiều tiến trình có thể cùng quan tâm đến những dữ liệu nào đó, do vậy hệ điều hành cần cung cấp một môi trường cho phép sự truy cập đồng thời đến các dữ liệu chung.
- Hợp tác hoàn thành tác vụ: đôi khi để đạt được một sự xử lý nhanh chóng, người ta phân chia một tác vụ thành các công việc nhỏ có thể tiến hành song song. Thường thì các công việc nhỏ này cần hợp tác với nhau để cùng hoàn thành tác vụ ban đầu, ví dụ dữ liệu kết xuất của tiến trình này lại là dữ liệu nhập cho tiến trình khác .Trong các trường hợp đó, hệ điều hành cần cung cấp cơ chế để các tiến trình có thể trao đổi thông tin với nhau.
2. Các vấn đề nảy sinh trong việc liên lạc giữa các tiến trình
Do mỗi tiến trình sỡ hữu một không gian địa chỉ riêng biệt, nên các tiến trình không thể liên lạc trực tiếp dễ dàng mà phải nhờ vào các cơ chế do hệ điều hành cung cấp. Khi cung cấp cơ chế liên lạc cho các tiến trình, hệ điều hành thường phải tìm giải pháp cho các vấn đề chính yếu sau :
Liên kết tường minh hay tiềm ẩn (explicit naming/implicit naming) : tiến trình có cần phải biết tiến trình nào đang trao đổi hay chia sẻ thông tin với nó ? Mối liên kết được gọi là tường minh khi được thiết lập rõ ràng , trực tiếp giữa các tiến trình, và là tiềm ẩn khi các tiến trình liên lạc với nhau thông qua một qui ước ngầm nào đó.
Liên lạc theo chế độ đồng bộ hay không đồng bộ (blocking / non-blocking): khi một tiến trình trao đổi thông tin với một tiến trình khác, các tiến trình có cần phải đợi cho thao tác liên lạc hoàn tất rồi mới tiếp tục các xử lý khác ? Các tiến trình liên lạc theo cơ chế đồng bộ sẽ chờ nhau hoàn tất việc liên lạc, còn các tiến trình liên lạc theo cơ chế nonblocking thì không.
Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán: cơ chế liên lạc giữa các tiến trình trong cùng một máy tính có sự khác biệt với việc liên lạc giữa các tiến trình giữa những máy tính khác nhau?
dothanhnhan44 (113A)- Tổng số bài gửi : 17
Join date : 17/07/2012
Re: Thảo luận Bài 5
Trình bày nguyên lý tập luồng và cho ví dụ hay Trình bày nguyên lý tập nguồn và cho ví dụ vậy bạn
NguyenNgocTrungNam (113A) đã 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 cha chờ đến khi có luồng được giải phóng.
Ví dụ:
Trong một doanh trai 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 sĩ 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 khác đượ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)
NguyenVanNgoc65 (113A)- Tổng số bài gửi : 5
Join date : 13/08/2012
Re: Thảo luận Bài 5
So sánh luồng trong Windows,Linux và Java?
TranThiHuyenTrang(113A)- Tổng số bài gửi : 22
Join date : 27/07/2012
Age : 38
Re: Thảo luận Bài 5
Sự đồng bộ của luồng
nguyendinhhieu13 (113A) on 17/8/2012, 18:55
Trong khi đang làm việc với nhiều luồng, nhiều hơn một luồng có thể muốn thâm nhập cùng một biến tại cùng thời điểm. Ví dụ, một luồng có thể cố gắng đọc dữ liệu, trong khi luồng khác cố gắng thay đổi dữ liệu. Trong trường hợp này, dữ liệu có thể bị sai.
Trong những trường hợp này, bạn cần cho phép một luồng hoàn thành trọn vẹn tác vụ của nó, và rồi thì mới cho phép các luồng kế tiếp thực thi. Khi hai hoặc nhiều hơn một luồng cần thâm nhập đến một tài nguyên được chia sẻ, bạn cần chắc chắn rằng tài nguyên đó sẽ được sử dụng chỉ bởi một luồng tại một thời điểm. Tiến trình này được gọi là "sự đồng bộ", (synchronization) được sử dụng để giải quyết vấn đề này, Java là ngôn ngữ duy nhất hổ trợ sự đồng bộ ở mức ngôn ngữ. Phương thức "đồng bộ" (synchronized) báo cho hệ thống đặt khóa trên tài nguyên.
Mấu chốt của sự đồng bộ hóa là khái niệm "monitor" (giám sát), hay còn gọi "semaphore" (cờ hiệu). Một "monitor" là một đối tượng mà được khóa độc quyền. Chỉ một luồng có thể có monitor tại mỗi thời điểm. Tất cả các luồng khác cố gắng thâm nhập vào monitor sẽ bị trì hoãn, cho đến khi luồng đầu tiên thoát khỏi monitor. Các luồng khác được báo chờ đợi monitor. Một luồng có thể monitor một đối tượng nhiều lần.
VD: Trong 1 gia đình có nhiều người, chẳng hạn 1 thời điểm chủ nhà đang tiếp khách (L1), song song đó có 1 bức thư được gửi đến cho L1, nhưng vì đang tiếp khách nên L1 ko thể nhận thư, khi đó cô giúp việc (L2) sẽ nhận thư giúp L1, sau đó mang vào phòng khách cho L1, lúc này L1 vừa tiếp khách, vừa nhận biết mình nhận được thư từ người khác gửi đến.
Admin
Ví dụ tốt. Có nghe giảng !
NguyenThiKimNgan (113A)- Tổng số bài gửi : 12
Join date : 19/07/2012
Re: Thảo luận Bài 5
-Tạo luồng nhẹ hơn tiến trìnhMaiTrieuHung16 (113A) đã viết:Tại sao lập trình đa luồng dễ hơn lập trình đa tiến trình ?
.
-Tiến trình nặng hơn luồng
-Luồng có được sự linh hoạt
ví dụ: tạo thêm 1 chỗ ngời trong lớp sẻ dễ hơn là tạo thêm 1 phòng học trong trường..
khi không cần chỗ ngồi đó nữa ta có thể huỷ một cách dễ dàng.Điều này nói lên sự linh hoạt của luồng.
NguyenHuuLinh31(113A)- Tổng số bài gửi : 33
Join date : 19/07/2012
Re: Thảo luận Bài 5
câu trả lời đơn giản nhất :NguyenHuuLinh31(113A) đã viết:-Tạo luồng nhẹ hơn tiến trìnhMaiTrieuHung16 (113A) đã viết:Tại sao lập trình đa luồng dễ hơn lập trình đa tiến trình ?
.
-Tiến trình nặng hơn luồng
-Luồng có được sự linh hoạt
ví dụ: tạo thêm 1 chỗ ngời trong lớp sẻ dễ hơn là tạo thêm 1 phòng học trong trường..
khi không cần chỗ ngồi đó nữa ta có thể huỷ một cách dễ dàng.Điều này nói lên sự linh hoạt của luồng.
Việc tạo ra và quản lý các process đòi hỏi nhiều tài nguyên của hệ thống (cả ram và CPU) nhiều hơn rất nhiều so với việc tạo ra một thread. Trong khi đó có thể chỉ cần tạo ra một thread để thực hiện song song một công việc hết sức đơn giản cùng với một công việc chính
VuMinhTan (113A)- Tổng số bài gửi : 29
Join date : 30/07/2012
Re: Thảo luận Bài 5
NguyenThiNgocPhuong(113A) đã 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.
-Tính nhất quán, dễ thay đổi
-Lập trình đa luồng dễ hơn lập trình đa tiến trình
vd: thêm mới 1 sinh viên dễ hơn thêm mới 1 lớp học
phamanhtuan95(113A)- Tổng số bài gửi : 22
Join date : 18/07/2012
Re: Thảo luận Bài 5
NguyenVanLam(I13A) đã viết:1. Giống nhau:
- Điều có thông tin trạng thái
- Luồng còn được gọi là tiến trình nhẹ.
- Nhiều luồng hoặc nhiều tiến trình có thể liên quan đến 1 chương trình.
- Dùng chung tài nguyên từ tiến trình(hoạc luồng) cha.
- Cùng có chức năng xử lý song song.
- Chia sẻ tài nguyên cho nhau.
- Tăng tốc tính toán.
- Đảm bảo tính đơn thể.
2. Khác nhau:
- Do các luồng cùng vận hành trong cùng 1 địa chỉ vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
- Do các luồng chung tài nguyên với cha và các luồng khác nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn và ít chiếm tài nguyên hơn tiến trình.
- Cấp phát bộ nhớ và tài nguyên cho tiến trình thì tốn kém hơn luồng.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình. Bởi vì trao đổi dữ liệu của lập trình đa luồng dễ hơn việc trao dữ liệu của lập trình đa tiến trình
- Đa tiến trình tốn resources hơn đa luồng.
Tạo luồng dễ dàng, tạo tiến trình tốn chi phí
phamanhtuan95(113A)- Tổng số bài gửi : 22
Join date : 18/07/2012
Re: Thảo luận Bài 5
NguyenThiThuThuy (113A) đã viết:Các hàm của Win32 API dùng để lập trình đa luồng :
- CreateThread(): Tạo một luồng để thực thi trong địa chỉ lời gọi tiến trình
- ExitThread(): Dùng để kêt thúc một luồng
- GetCurrentThread(): Có chức năng trả về mục quản tạm cho luồng hiện hành
- TerminateThread(): Có chức năng ngắt luồng
- SetThreadPriority(): Có chức năng thiết lập giá trị ưu tiên cho một luồng
- GetThreadPriority(HANDLE threadHandle) : Nhận độ ưu tiên của luồng.
phamanhtuan95(113A)- Tổng số bài gửi : 22
Join date : 18/07/2012
khã năng của đ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ề).
- 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.
- 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).
- 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
- 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.
- 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).
- 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
NguyenVuLinh12053_I11C- Tổng số bài gửi : 41
Join date : 07/08/2012
Phân biệt khái niệm luồng với tiến trình
• Luồng: 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 hệ thống (HWP - Heavy Weight Process)
Ví dụ: Lớp học là một tiến trình. Trong lớp sẽ có một giáo viên(đơn luồng) và các học viên (đa luồng)
• Tiến trình: là chương trình trong thời gian thực hiện (đặt dưới sự quản lý của hệ điều hành). Có sự phân biệt Tiến trình hệ thống (của Hệ điều hành) với Tiến trình người dùng.
Ví dụ: Lớp HC11TH3A đang học là một tiến trình
Ví dụ: Lớp học là một tiến trình. Trong lớp sẽ có một giáo viên(đơn luồng) và các học viên (đa luồng)
• Tiến trình: là chương trình trong thời gian thực hiện (đặt dưới sự quản lý của hệ điều hành). Có sự phân biệt Tiến trình hệ thống (của Hệ điều hành) với Tiến trình người dùng.
Ví dụ: Lớp HC11TH3A đang học là một tiến trình
NguyenVuLinh12053_I11C- Tổng số bài gửi : 41
Join date : 07/08/2012
Ví dụ về lập trình đa luồng trong Window form
Mình tham khảo trên mạng thấy có một số vd về lập trình đa luồng cũng tương đối dễ hiểu, các bạn tham khảo nhé!
Mình lấy ví dụ là làm một cái progressBar để mô tả tiến trình chạy của vòng lặp for. Có một ô để nhập số vòng lặp cần chạy và một thanh progressBar để hiển thị từng bước chạy trong vòng lặp.
Code tham khảo :
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Maximum = Convert.ToInt32(textBox1.Text);
progressBar1.Minimum = 0;
progressBar1.Value = 0;
Thread tientrinh = new Thread(new ThreadStart(runpr));
tientrinh.IsBackground = true;
tientrinh.Start();
}
delegate void xulytientrinh();
public void incprocessBar(){
progressBar1.Value += 1;
}
private void runpr()
{
int n= Convert.ToInt32(textBox1.Text);
int i = 0;
for (i = 0; i < n; i++)
{
progressBar1.Invoke(new xulytientrinh(incprocessBar));
Thread.Sleep(10);
}
}
Mình lấy ví dụ là làm một cái progressBar để mô tả tiến trình chạy của vòng lặp for. Có một ô để nhập số vòng lặp cần chạy và một thanh progressBar để hiển thị từng bước chạy trong vòng lặp.
Code tham khảo :
private void button1_Click(object sender, EventArgs e)
{
progressBar1.Maximum = Convert.ToInt32(textBox1.Text);
progressBar1.Minimum = 0;
progressBar1.Value = 0;
Thread tientrinh = new Thread(new ThreadStart(runpr));
tientrinh.IsBackground = true;
tientrinh.Start();
}
delegate void xulytientrinh();
public void incprocessBar(){
progressBar1.Value += 1;
}
private void runpr()
{
int n= Convert.ToInt32(textBox1.Text);
int i = 0;
for (i = 0; i < n; i++)
{
progressBar1.Invoke(new xulytientrinh(incprocessBar));
Thread.Sleep(10);
}
}
LeDangBaoNgoc55 (113A)- Tổng số bài gửi : 15
Join date : 16/07/2012
Những ích lợi 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, thì một trong các cô (cô thứ 1) sẽ trả lời. 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.
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, thì một trong các cô (cô thứ 1) sẽ trả lời. 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.
NguyenVuLinh12053_I11C- Tổng số bài gửi : 41
Join date : 07/08/2012
cơ bản về lập trình đa luồng
- Windows là hệ điều hành đồ họa trực quan, do dó các tài nguyên của hệ thống cung cấp rất đa dạng và phong phú. Lập trình trên Windows phải hết sức thân thiện với người dùng thông qua giao diện đồ họa sẵn có của Windows.
- Windows sử dụng các hàm trong thư viện Win32 API: Hệ điều hành Windows cung cấp hàng trăm hàm để cho những ứng dụng có thể sử dụng truy cập các tài nguyên trong hệ thống. Những hàm đó được gọi là giao diện lập trình ứng dụng API(Application Programming Interface).
- Ứng dụng Windows vận hành như một tiến trình với 1 hoặc nhiều luồng: Ứng dụng Win32 xử lý theo các sự kiện(event - driven), các ứng dụng khi được viết sẽ liên tục chờ cho hệ điều hành truyền các dữ liệu nhập vào. Hệ thống sẽ đảm nhiệm truyền tất cả các dữ liệu nhập của ứng dụng vào các cửa sổ khác nhau.Mỗi cửa sổ sẽ có riêng một hàm gọi là hàm xử lý. Hệ thống sẽ gọi khi có bất cứ dữ liệu nhập vào được truyền đến cửa sổ, hàm này xử lý các dữ liệu nhập đó và trả quyền điều khiển về cho hệ thống.Hệ thống truyền các dữ liệu nhập vào thủ tục xử lý của cửa sổ thông qua một hình thức, gọi là thông điệp(message).Hệ thống sẽ phát sinh một thông điệp khi có một sự kiện nhập vào, Ví dụ như Khi người dùng nhấn một phím, di chuyển thiết bị chuột, hay kích vào các điều khiển (control) như thanh cuộn,...
- Windows sử dụng các hàm trong thư viện Win32 API: Hệ điều hành Windows cung cấp hàng trăm hàm để cho những ứng dụng có thể sử dụng truy cập các tài nguyên trong hệ thống. Những hàm đó được gọi là giao diện lập trình ứng dụng API(Application Programming Interface).
- Ứng dụng Windows vận hành như một tiến trình với 1 hoặc nhiều luồng: Ứng dụng Win32 xử lý theo các sự kiện(event - driven), các ứng dụng khi được viết sẽ liên tục chờ cho hệ điều hành truyền các dữ liệu nhập vào. Hệ thống sẽ đảm nhiệm truyền tất cả các dữ liệu nhập của ứng dụng vào các cửa sổ khác nhau.Mỗi cửa sổ sẽ có riêng một hàm gọi là hàm xử lý. Hệ thống sẽ gọi khi có bất cứ dữ liệu nhập vào được truyền đến cửa sổ, hàm này xử lý các dữ liệu nhập đó và trả quyền điều khiển về cho hệ thống.Hệ thống truyền các dữ liệu nhập vào thủ tục xử lý của cửa sổ thông qua một hình thức, gọi là thông điệp(message).Hệ thống sẽ phát sinh một thông điệp khi có một sự kiện nhập vào, Ví dụ như Khi người dùng nhấn một phím, di chuyển thiết bị chuột, hay kích vào các điều khiển (control) như thanh cuộn,...
NguyenVuLinh12053_I11C- Tổng số bài gửi : 41
Join date : 07/08/2012
nguyên lý tập luồng
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.
• 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.
NguyenVuLinh12053_I11C- Tổng số bài gửi : 41
Join date : 07/08/2012
Câu 1. Phân biệt khái niệm "luồng" và "tiến trình". Cho biết những ưu việt của công nghệ đa luồng.
- 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) và là một đơn vị nhỏ hơn của tiến trình.
- Tiến trình (Process)là chương trình trong thời gian thực hiện (đặt dưới sự quản lý của HDH).Có sự phân biệt Tiến trình hệ thống (của Hệ điều hành) với Tiến trình người dùng.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.
-Tính ưu việt của công nghệ đa luồng :
+ Đảm bảo được khả năng đáp ứng của tiến trình tốt hơn, khi lập trình đa luồng thì một khi 1 luồng có sự cố thì luồng khác vẫn làm việc, vẫn phản hồi ,trong trường hợp lập trình đơn luồng khi gặp sự cố thì luồng đó sẽ chậm và làm chậm luôn cả tiến trình, đ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 đó gai tăng sự đáp ứng đối với người dùng.Ví 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 vẫn nạp bằng một luồng khác.
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, thì một trong các cô (người thứ nhất) sẽ trả lời, 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
+ Theo mặc định các luồng có thể dùng chung bộ nhớ và tai nguyên của luồng cha. 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 nằm trong cùng không gian, địa chỉ,vài luồng cùng vận hành trong một vùng địa chỉ 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à có kệ sách, xe máy, máy vi tính … mọi người có thể dùng chung và sử dụng chung kệ sách, xe máy, máy vi tính. Trong khi không thể dùng chung những đồ dùng trên với nhà khác được
Trong lớp chúng ta có thể dùng bảng củ lớp mình, chúng ta có thể chia sẻ các thông tin cần thiết cho tất cả các thành viên ở trong lớp biết,trong khi chúng ta khong thể dùng chung bảng của lớp khác để chia sẻ thông tin cho lớp mình được.
+ 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 rất tốn kém. Do luồng có thể dùng chung tài nguyên với luồng cha và các luồng khác, việc tạo lập ngữ cảnh cũng nhanh hơn (Solaris2, 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 của lớp, ai cần ghi thì ghi, ai cần thì chụp hình về xem
Có thể bố trí một chỗ ngồi ở trong lớp cho một bạn đến sau dễ dàng hơn việc làm một chiếc ghế khác cho bạn đó.
+ Chuyển ngữ cảnh từ luồng này sang luồng khác thì nhanh hơn chuyển ngữ cảnh từ tiến trình này sang tiến trình khác.
+ Tận dụng được ưu thế kiến trúc đa xử lý (nhiều CPU). Khi đa luồng thì 1 luồng dùng CPU này và 1 luồng dùng CPU khác sẽ nhanh hơn và các luồng có thể làm việc song song , mỗi luồng có thể chạy bởi CPU riêng. Tiến trình đa luồng sẽ làm việc nhanh hơn tiến trình đơn luồng.
+ Lập trình đa luồng dễ dàng hơn lập trình đa tiến trình
- Tiến trình (Process)là chương trình trong thời gian thực hiện (đặt dưới sự quản lý của HDH).Có sự phân biệt Tiến trình hệ thống (của Hệ điều hành) với Tiến trình người dùng.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.
-Tính ưu việt của công nghệ đa luồng :
+ Đảm bảo được khả năng đáp ứng của tiến trình tốt hơn, khi lập trình đa luồng thì một khi 1 luồng có sự cố thì luồng khác vẫn làm việc, vẫn phản hồi ,trong trường hợp lập trình đơn luồng khi gặp sự cố thì luồng đó sẽ chậm và làm chậm luôn cả tiến trình, đ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 đó gai tăng sự đáp ứng đối với người dùng.Ví 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 vẫn nạp bằng một luồng khác.
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, thì một trong các cô (người thứ nhất) sẽ trả lời, 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
+ Theo mặc định các luồng có thể dùng chung bộ nhớ và tai nguyên của luồng cha. 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 nằm trong cùng không gian, địa chỉ,vài luồng cùng vận hành trong một vùng địa chỉ 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à có kệ sách, xe máy, máy vi tính … mọi người có thể dùng chung và sử dụng chung kệ sách, xe máy, máy vi tính. Trong khi không thể dùng chung những đồ dùng trên với nhà khác được
Trong lớp chúng ta có thể dùng bảng củ lớp mình, chúng ta có thể chia sẻ các thông tin cần thiết cho tất cả các thành viên ở trong lớp biết,trong khi chúng ta khong thể dùng chung bảng của lớp khác để chia sẻ thông tin cho lớp mình được.
+ 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 rất tốn kém. Do luồng có thể dùng chung tài nguyên với luồng cha và các luồng khác, việc tạo lập ngữ cảnh cũng nhanh hơn (Solaris2, 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 của lớp, ai cần ghi thì ghi, ai cần thì chụp hình về xem
Có thể bố trí một chỗ ngồi ở trong lớp cho một bạn đến sau dễ dàng hơn việc làm một chiếc ghế khác cho bạn đó.
+ Chuyển ngữ cảnh từ luồng này sang luồng khác thì nhanh hơn chuyển ngữ cảnh từ tiến trình này sang tiến trình khác.
+ Tận dụng được ưu thế kiến trúc đa xử lý (nhiều CPU). Khi đa luồng thì 1 luồng dùng CPU này và 1 luồng dùng CPU khác sẽ nhanh hơn và các luồng có thể làm việc song song , mỗi luồng có thể chạy bởi CPU riêng. Tiến trình đa luồng sẽ làm việc nhanh hơn tiến trình đơn luồng.
+ Lập trình đa luồng dễ dàng hơn lập trình đa tiến trình
LamVuThai (113A)- Tổng số bài gửi : 41
Join date : 16/07/2012
Khái niệm đa luồng. So sánh luồng với tiến trình (giống và khác nhau ở chỗ nào?)
* 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
* 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
Khái niệm Luồng và so sánh với tiến trình truyền thông
Một luồng thường được gọi là tiến 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 tiến 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 tiến trình truyền thống (hay tiến trình nặng) có một luồng điều khiển đơn. Nếu tiến 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.
Sự giống nhau:
- Đều có thông tin trạng thái
- Luồng cũng là tiến trình nhưng là tiến trình nhẹ (Light Weigh Process)
- Đa luồng hay đa tiến trình có thể liên quan đến một chương trình.
- Chia sẻ tài nguyên cho nhau, tăng tốc tính toán, đảm bảo tính đơn thể
- Do luồng cùng vận hành trong 1 vùng địa chỉ, vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
Ví dụ: Mình cần mượn xe đi đâu đó thì mượn xe trong gia đình để đi thì dễ hơn mượn của người ngoài
- Do luồng chung tài nguyên với luồng cha nên việc tạo lập và chuyển đổi ngữ cảnh cũng nhanh hơn tiến trình
Ví dụ: Việc ngăn phòng riêng ra trong nhà thì dễ hơn việc xây thêm hay mua thêm một nhà khác.
- Cấp phát tài nguyên bộ nhớ cho tiến trình khá tốn kém.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình.
Sự khác nhau:
- Lập trình đa luồng dễ hơn lập trình đa tiến trình.
- Tạo mới một tiến trình khó hơn tạo mới một luồng.
- Luồng không cần gởi, nhận thông điệp.
- Luồng chuyển đổi ngữ cảnh nhanh và ít chiếm tài nguyên hơn tiến trình.
- Luồng chia sẻ tài nguyên dùng chung dể hơn tiến trình.
Một tiến trình truyền thống (hay tiến trình nặng) có một luồng điều khiển đơn. Nếu tiến 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.
Sự giống nhau:
- Đều có thông tin trạng thái
- Luồng cũng là tiến trình nhưng là tiến trình nhẹ (Light Weigh Process)
- Đa luồng hay đa tiến trình có thể liên quan đến một chương trình.
- Chia sẻ tài nguyên cho nhau, tăng tốc tính toán, đảm bảo tính đơn thể
- Do luồng cùng vận hành trong 1 vùng địa chỉ, vì vậy dễ dùng chung tài nguyên hơn đa tiến trình
Ví dụ: Mình cần mượn xe đi đâu đó thì mượn xe trong gia đình để đi thì dễ hơn mượn của người ngoài
- Do luồng chung tài nguyên với luồng cha nên việc tạo lập và chuyển đổi ngữ cảnh cũng nhanh hơn tiến trình
Ví dụ: Việc ngăn phòng riêng ra trong nhà thì dễ hơn việc xây thêm hay mua thêm một nhà khác.
- Cấp phát tài nguyên bộ nhớ cho tiến trình khá tốn kém.
- Lập trình đa luồng thì dễ hơn lập trình đa tiến trình.
Sự khác nhau:
- Lập trình đa luồng dễ hơn lập trình đa tiến trình.
- Tạo mới một tiến trình khó hơn tạo mới một luồng.
- Luồng không cần gởi, nhận thông điệp.
- Luồng chuyển đổi ngữ cảnh nhanh và ít chiếm tài nguyên hơn tiến trình.
- Luồng chia sẻ tài nguyên dùng chung dể hơn tiến trình.
Ví dụ Lập trình đa luồng dễ hơn lập trình đa tiến trình
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.
NguyenVanNghiem(HC11TH3A)- Tổng số bài gửi : 21
Join date : 19/07/2012
Trang 3 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Similar topics
» Giải giúp bài RRS này nhé
» Thảo luận các vấn đề của Môn học
» Thảo luận Bài 3
» Thảo luận bài 4
» Thảo luận Bài 7
» Thảo luận các vấn đề của Môn học
» Thảo luận Bài 3
» Thảo luận bài 4
» Thảo luận Bài 7
Trang 3 trong tổng số 9 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết