Thảo luận Bài 5
+100
NguyenTuanHai_I12A
lymydung_I12A
DiepMaiNgocYen(I12A)
tranthithanhuyen85 (I11C)
minhtam_I12C
nguyenthanhnghi_I12C
nguyenthihongtham_I12C
LeMInhTien(I11C)
DuongTrungQuan
Đỗ Phan Diễm Hương I12A
TRANTHINHPHAT (I11C)
TrinhThiPhuongThaoI12C
TRANTHUYOANH_10H1010066
nguyenthaihiep (I11C)
maidangvu_I12A
huynhtamhaoI12A
TranVanBao(I12A)
TranPhiLong (I11C)
quynhnhi.nguyen_I12A
BuiAnhNgoc(I12C)
DaoThaiHuyI12A
HUYNHMINHHAI(I12A)
VoTrongQuyet-I12A
phamphihung55
PhamDucPhuong(I12A)
nguyenthanhphongHC11TH2A
ngothihanHC11TH2A
NguyenXuanTri28
LeMinhDuc (I11C)
nguyen_tuan_phat_I12A
BuiHuongTra(I12A)
NguyenHongHaiI12C
lengocthuthao89 (i11c)
huynhvanhung(I12A)
leminhtam13(I12A)
NguyenThiHue48(I12A)
quicly_I111c
lethianhnhat_I12A
lethanhsang_I12A
phanngocthinh(i12a)
hoanghaiyen
Đinh Đông Dương
NgoXuanQuoc_(102C)
trantrungnam-HC11TH2A
Nguyen Doan Linh051(I11c)
HUYNHDUCANHI12A
levanhop.it
LeQuocKhanh-11H1010059
nguyenthipha1510
nguyenhuutho
NguyenthechinhI12A
TaThucCuongI12C
LeXuanHau (I12C)
TranThiMyKhanh(I12A)
ng_dang_khoa_HC11TH2A
TranTrungTinh(I12A)
plminhhoangI12A
LePhucHiep(102C)
thailongI12C
NguyenAnhTan15 (I12C)
NguyenDangPhongI12A
lacongchinh_I12A
NguyenHaThanh97 (I11C)
ngophicamI12A
TranTrungHienI12C
phamduyI12A
TranThiAnhDao89I12C
nguyenthingocmai_I12A
phuongnguyen
TranLeThanhVu_I12A
TranHoangNhanI12C
dangmonghai(I12A)
LeThiMaiPhuongI12A
maihuynam(I91c)
TranMinhTuan143(I12A)
vothingocthuy87(I11C)
DoanNgocDan(I12A)
hoxuanvu_I12A
letanthanh18(I12A)
HoNgocTuan142(I12A)
NguyenVanBenI12C
NguyenNgocDuy(I12A)
TranThiNgocQuynh(I12C)
tranvanthien27(I12C)
luthioanh-I12A
LeThanhTung (I11C)
NgoPhuQuoc_I12C
NguyenThiHongYen(I12A)
NguyenHoangThangI12A
hoanggiangI12C
TrinhVinhThanh (I12A)
HoNguyenQuocTuy(I12A)
PhamQuangHien_I12A
nguyenthimao_I12A
nguyenvanhonglac_0066
BuiDaiNghia-102C
DaoQuangTri38(I12A)
TruongQuocTrung_I12A
TranHuyCuong17 (I12A)
Admin
104 posters
Trang 1 trong tổng số 9 trang
Trang 1 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Re: Thảo luận Bài 5
Đa luồng
Đa luồng là một kỹ thuật cho phép một chương trình hoặc một quá trình để thực hiện nhiều nhiệm vụ đồng thời (cùng một lúc và song song). Nó cho phép một quá trình để chạy các nhiệm vụ của nó trong chế độ song song trên một hệ thống xử lý duy nhất
Trong khái niệm xử lý đa luồng, một số quá trình nhiều nhẹ đang chạy trong một tiến trình / chương trình, nhiệm vụ hoặc một bộ xử lý duy nhất. Ví dụ, bạn sử dụng một trình xử lý, bạn thực hiện nhiều nhiệm vụ khác nhau như in ấn, kiểm tra chính tả và như vậy. Phần mềm đa luồng xử lý mỗi quá trình như là một chương trình riêng biệt.
Trong Java, Java Virtual Machine (JVM) cho phép một ứng dụng có nhiều chủ đề thực hiện chạy đồng thời. Nó cho phép một chương trình có trách nhiệm hơn cho người sử dụng. Khi một chương trình có nhiều chủ đề sau đó CPU có thể chuyển đổi giữa hai chủ đề để thực hiện chúng cùng một lúc.
Ví dụ, nhìn vào sơ đồ hiển thị như sau:
Trong sơ đồ này, hai chủ đề đang được thực hiện có nhiều hơn một nhiệm vụ. Nhiệm vụ của mỗi thread được chuyển sang các nhiệm vụ của các chủ đề khác.
Ví dụ nguyên lý tập Luồng
Trong một cửa hàng làm tóc, có rất nhiều nhân viên hớt tóc, làm móng... (tương ứng là các luồng con)
Cứ mỗi người nhân viên, sẽ chịu trách nhiệm phục vụ cho khách hàng của mình (mỗi luồng có thể chạy bởi CPU riêng), do đó có bao nhiêu nhân viên trong tiệm hớt tóc thì sẽ tương ứng với số luồng trong tập luồng
Số lượng luồng càng nhiều khả năng đáp ứng càng cao
Khi có khách hàng đến, thì nhân viên nào đang trống khách (đang ngồi chơi # đang ngủ) thì sẽ phục vụ cho khách hàng ( luồng được nhân yêu cầu, được đánh thức và đưa vào vận hành) khi phục vụ xong nhân viên được tạm nghỉ giải lao chờ có khách hàng mới (luồng trả về tập luồng)
Nếu số lượng khách hàng quá đông, hơn số lượng nhân viên, thì khách hàng sẽ xếp hàng đợi đến khi có 1 nhân viên rảnh (1 luồng được giải phóng)
Đa luồng là một kỹ thuật cho phép một chương trình hoặc một quá trình để thực hiện nhiều nhiệm vụ đồng thời (cùng một lúc và song song). Nó cho phép một quá trình để chạy các nhiệm vụ của nó trong chế độ song song trên một hệ thống xử lý duy nhất
Trong khái niệm xử lý đa luồng, một số quá trình nhiều nhẹ đang chạy trong một tiến trình / chương trình, nhiệm vụ hoặc một bộ xử lý duy nhất. Ví dụ, bạn sử dụng một trình xử lý, bạn thực hiện nhiều nhiệm vụ khác nhau như in ấn, kiểm tra chính tả và như vậy. Phần mềm đa luồng xử lý mỗi quá trình như là một chương trình riêng biệt.
Trong Java, Java Virtual Machine (JVM) cho phép một ứng dụng có nhiều chủ đề thực hiện chạy đồng thời. Nó cho phép một chương trình có trách nhiệm hơn cho người sử dụng. Khi một chương trình có nhiều chủ đề sau đó CPU có thể chuyển đổi giữa hai chủ đề để thực hiện chúng cùng một lúc.
Ví dụ, nhìn vào sơ đồ hiển thị như sau:
Trong sơ đồ này, hai chủ đề đang được thực hiện có nhiều hơn một nhiệm vụ. Nhiệm vụ của mỗi thread được chuyển sang các nhiệm vụ của các chủ đề khác.
Ví dụ nguyên lý tập Luồng
Trong một cửa hàng làm tóc, có rất nhiều nhân viên hớt tóc, làm móng... (tương ứng là các luồng con)
Cứ mỗi người nhân viên, sẽ chịu trách nhiệm phục vụ cho khách hàng của mình (mỗi luồng có thể chạy bởi CPU riêng), do đó có bao nhiêu nhân viên trong tiệm hớt tóc thì sẽ tương ứng với số luồng trong tập luồng
Số lượng luồng càng nhiều khả năng đáp ứng càng cao
Khi có khách hàng đến, thì nhân viên nào đang trống khách (đang ngồi chơi # đang ngủ) thì sẽ phục vụ cho khách hàng ( luồng được nhân yêu cầu, được đánh thức và đưa vào vận hành) khi phục vụ xong nhân viên được tạm nghỉ giải lao chờ có khách hàng mới (luồng trả về tập luồng)
Nếu số lượng khách hàng quá đông, hơn số lượng nhân viên, thì khách hàng sẽ xếp hàng đợi đến khi có 1 nhân viên rảnh (1 luồng được giải phóng)
TranHuyCuong17 (I12A)- Tổng số bài gửi : 37
Join date : 16/02/2012
Age : 37
Đến từ : DLY™
Một số thông tin thêm về đa luồng VÀ các trạng thái của luồng
1. Một số thông tin thêm về đa luồng
- Hỗ trợ luồng được cung cấp hoặc ở cấp người dùng, cho các luồng người dùng hoặc ở cấp nhân, cho các luồng nhân như sau:
• Luồng người dùng: được hỗ trợ dưới nhân và được cài đặt bởi thư viện luồng tại cấp người dùng. Thư viện cung cấp hỗ trợ cho việc tạo luồng, lập thời biểu, và quản lý mà không có sự hỗ trợ từ nhân. Vì nhân không biết các luồng cấp người dùng, tất cả việc tạo luồng và lập thời biểu được thực hiện trong không gian người dùng mà không cần sự can thiệp của nhân. Do đó, các luồng cấp người dùng thường tạo và quản lý nhanh, tuy nhiên chúng cũng có những trở ngại. Thí dụ, nếu nhân là đơn luồng thì bất cứ luồng cấp người dùng thực hiện một lời gọi hệ thống nghẽn sẽ làm cho toàn bộ quá trình bị nghẽn, thậm chí nếu các luồng khác sẳn dùng để chạy trong ứng dụng. Các thư viện luồng người dùng gồm các luồng POSIX Pthreads, Mach C-threads và Solaris 2 UI-threads.
• Luồng nhân: được hỗ trợ trực tiếp bởi hệ điều hành. Nhân thực hiện việc tạo luồng, lập thời biểu, và quản lý không gian nhân. Vì quản lý luồng được thực hiện bởi hệ điều hành, luồng nhân thường tạo và quản lý chậm hơn luồng người dùng. Tuy nhiên, vì nhân được quản lý các luồng nếu một luồng thực hiện lời gọi hệ thống nghẽn, nhân có thể lập thời biểu một luồng khác trong ứng dụng thực thi. Trong môi trường đa xử lý, nhân có thể lập thời biểu luồng trên một bộ xử lý khác. Hầu hết các hệ điều hành hiện nay như Windows NT, Windows 2000, Solaris 2, BeOS và Tru64 UNIX (trước Digital UNIX)-hỗ trợ các luồng nhân.
2. Các trạng thái của luồng
-Running : đang chạy – được hiểu là khi hệ thống định rõ vị trí luồng trong CPU
-Ready to run : đã chạy ( nhưng chưa được định vị trí trong CPU )
-Resumed : luồng ở trạng thái “ready to run” sau khi suspended/ blocked
-Suspended : luồng tự nguyện dừng lại để cho 1 luồng khác chạy
-Blocked : luồng đang đợi tài nguyên để tiếp tục hoặc bị 1 sự kiện của hệ thống
chặn ngang
- Hỗ trợ luồng được cung cấp hoặc ở cấp người dùng, cho các luồng người dùng hoặc ở cấp nhân, cho các luồng nhân như sau:
• Luồng người dùng: được hỗ trợ dưới nhân và được cài đặt bởi thư viện luồng tại cấp người dùng. Thư viện cung cấp hỗ trợ cho việc tạo luồng, lập thời biểu, và quản lý mà không có sự hỗ trợ từ nhân. Vì nhân không biết các luồng cấp người dùng, tất cả việc tạo luồng và lập thời biểu được thực hiện trong không gian người dùng mà không cần sự can thiệp của nhân. Do đó, các luồng cấp người dùng thường tạo và quản lý nhanh, tuy nhiên chúng cũng có những trở ngại. Thí dụ, nếu nhân là đơn luồng thì bất cứ luồng cấp người dùng thực hiện một lời gọi hệ thống nghẽn sẽ làm cho toàn bộ quá trình bị nghẽn, thậm chí nếu các luồng khác sẳn dùng để chạy trong ứng dụng. Các thư viện luồng người dùng gồm các luồng POSIX Pthreads, Mach C-threads và Solaris 2 UI-threads.
• Luồng nhân: được hỗ trợ trực tiếp bởi hệ điều hành. Nhân thực hiện việc tạo luồng, lập thời biểu, và quản lý không gian nhân. Vì quản lý luồng được thực hiện bởi hệ điều hành, luồng nhân thường tạo và quản lý chậm hơn luồng người dùng. Tuy nhiên, vì nhân được quản lý các luồng nếu một luồng thực hiện lời gọi hệ thống nghẽn, nhân có thể lập thời biểu một luồng khác trong ứng dụng thực thi. Trong môi trường đa xử lý, nhân có thể lập thời biểu luồng trên một bộ xử lý khác. Hầu hết các hệ điều hành hiện nay như Windows NT, Windows 2000, Solaris 2, BeOS và Tru64 UNIX (trước Digital UNIX)-hỗ trợ các luồng nhân.
2. Các trạng thái của luồng
-Running : đang chạy – được hiểu là khi hệ thống định rõ vị trí luồng trong CPU
-Ready to run : đã chạy ( nhưng chưa được định vị trí trong CPU )
-Resumed : luồng ở trạng thái “ready to run” sau khi suspended/ blocked
-Suspended : luồng tự nguyện dừng lại để cho 1 luồng khác chạy
-Blocked : luồng đang đợi tài nguyên để tiếp tục hoặc bị 1 sự kiện của hệ thống
chặn ngang
TruongQuocTrung_I12A- Tổng số bài gửi : 18
Join date : 14/03/2012
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?
TruongQuocTrung_I12A- Tổng số bài gửi : 18
Join date : 14/03/2012
lợi ích 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 (ví dụ, 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ề).
VD:người 1 người thu ngân trong siêu thị đang tính tiền cho khách hàng mặc dù đằng sau còn rất nhiều người khách khác thì trong lúc đó cũng đang có nhiều người thu ngân khác phục vụ cho các khách hàng khác
- 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 một vùng địa chỉ, do đó dễ chia sẻ tài nguyên hơn so với trường hợp đa tiến trình.
VD:Mẫu csdl quản lí sinh viên trong trường nếu thống nhất dùng chung 1 mẫu thì dễ dàng chỉnh sửa nếu cần thay đổi
- Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là một 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).
VD:2 sinh viên cùng phòng học cùng lớp thì nên đi 1 xe máy sẽ đỡ tốn kém hơn là mỗi người đi 1 xe
- 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ể được chạy bởi CPU riêng.
VD:với một CPU đa luồng bạn sẽ thấy sự cải thiện lớn khi xem DVD trong lúc máy vẫn đang chơi game online mà tốc độ không bị ảnh hưởng, bởi vì từng ứng dụng sẽ được gán trên các lõi khác nhau.
VD:người 1 người thu ngân trong siêu thị đang tính tiền cho khách hàng mặc dù đằng sau còn rất nhiều người khách khác thì trong lúc đó cũng đang có nhiều người thu ngân khác phục vụ cho các khách hàng khác
- 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 một vùng địa chỉ, do đó dễ chia sẻ tài nguyên hơn so với trường hợp đa tiến trình.
VD:Mẫu csdl quản lí sinh viên trong trường nếu thống nhất dùng chung 1 mẫu thì dễ dàng chỉnh sửa nếu cần thay đổi
- Tiết kiệm (Economy): Cấp phát bộ nhớ và tài nguyên cho tiến trình là một 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).
VD:2 sinh viên cùng phòng học cùng lớp thì nên đi 1 xe máy sẽ đỡ tốn kém hơn là mỗi người đi 1 xe
- 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ể được chạy bởi CPU riêng.
VD:với một CPU đa luồng bạn sẽ thấy sự cải thiện lớn khi xem DVD trong lúc máy vẫn đang chơi game online mà tốc độ không bị ảnh hưởng, bởi vì từng ứng dụng sẽ được gán trên các lõi khác nhau.
DaoQuangTri38(I12A)- Tổng số bài gửi : 26
Join date : 22/02/2012
Phân biệt khái niệm luồng và tiến trình, những ích lợi của công nghệ đa luồng
a) Khái niệm luồng ( thread )
+ Luồng 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 của tiến trình truyền thống ( HWP – Heavy Weight Process ).
+ Một luồng là một dòng xử lý cơ bản trong hệ thống. Mỗi luồng xử lý tuần tự đoạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và một vùng nhớ stack riêng-> luồng bao gồm: mã luồng ( thread ID ) + bộ đếm chương trình ( program counter ) + tập thanh ghi ( register set ) + stack.
b) Khái niệm tiến trình ( process)
+ Việc thực hiện các công việc được mô tả thông qua chương trình-> chương trình hoạt động thì chuyển thành tiến trình-> một tiến trình gồm:mã nguồn chương trình (code ) + data + bộ đếm chương trình ( program counter ) + ngăn xếp ( stack ) + giá trị ở các thanh ghi ( register values )-> một tiến trình cần: cung cấp đầy đủ tài nguyên cần thiết + CPU tiếp nhận và thực hiện.
+ Tiến trình có thể có một luồng chính với nhiều luồng phụ.
c) Phân biệt luồng và tiến trình
+ Luồng được coi là mức thấp hơn của tiến trình, mỗi tiến trình có thể có nhiều luồng.
+ Hoạt động của các luồng giống như tiến trình nhưng các luồng cùng chia sẻ không gian địa chỉ chung, còn các tiến trình thì hoàn toàn độc lập.
d) Trình bày những ích lợi của công nghệ đa luồng.
+ Đáp ứng nhanh ( responsiveness ): cho phép luồng chính tiếp tục được thực hiện thậm chí khi một luồng bị ách hoặc quá bận.
+ Chia sẻ tài nguyên ( resource sharing ): các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha, cho phép 1 ứng dụng có 1 số luồng khác nhau hoạt động trong cùng 1 không gian địa chỉ.
+ 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 nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
+ Tận dụng được thế mạnh của kiến trúc đa xử lý ( multiprocessor ): làm tăng tính song song trên hệ máy nhiều CPU ( processor ).
+ Lập trình đa luồng dễ hơn lập trình đa tiến trình, tạo mới 1 tiến trình vừa lâu vừa khó, tạo mới 1 luồng thì nhanh và dễ hơn.
+ Luồng 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 của tiến trình truyền thống ( HWP – Heavy Weight Process ).
+ Một luồng là một dòng xử lý cơ bản trong hệ thống. Mỗi luồng xử lý tuần tự đoạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và một vùng nhớ stack riêng-> luồng bao gồm: mã luồng ( thread ID ) + bộ đếm chương trình ( program counter ) + tập thanh ghi ( register set ) + stack.
b) Khái niệm tiến trình ( process)
+ Việc thực hiện các công việc được mô tả thông qua chương trình-> chương trình hoạt động thì chuyển thành tiến trình-> một tiến trình gồm:mã nguồn chương trình (code ) + data + bộ đếm chương trình ( program counter ) + ngăn xếp ( stack ) + giá trị ở các thanh ghi ( register values )-> một tiến trình cần: cung cấp đầy đủ tài nguyên cần thiết + CPU tiếp nhận và thực hiện.
+ Tiến trình có thể có một luồng chính với nhiều luồng phụ.
c) Phân biệt luồng và tiến trình
+ Luồng được coi là mức thấp hơn của tiến trình, mỗi tiến trình có thể có nhiều luồng.
+ Hoạt động của các luồng giống như tiến trình nhưng các luồng cùng chia sẻ không gian địa chỉ chung, còn các tiến trình thì hoàn toàn độc lập.
d) Trình bày những ích lợi của công nghệ đa luồng.
+ Đáp ứng nhanh ( responsiveness ): cho phép luồng chính tiếp tục được thực hiện thậm chí khi một luồng bị ách hoặc quá bận.
+ Chia sẻ tài nguyên ( resource sharing ): các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha, cho phép 1 ứng dụng có 1 số luồng khác nhau hoạt động trong cùng 1 không gian địa chỉ.
+ 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 nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
+ Tận dụng được thế mạnh của kiến trúc đa xử lý ( multiprocessor ): làm tăng tính song song trên hệ máy nhiều CPU ( processor ).
+ Lập trình đa luồng dễ hơn lập trình đa tiến trình, tạo mới 1 tiến trình vừa lâu vừa khó, tạo mới 1 luồng thì nhanh và dễ hơn.
BuiDaiNghia-102C- Tổng số bài gửi : 5
Join date : 21/02/2012
nguyên lý tập luồng ( thread pools )
+ Tiến trình cha tạo lập sẵn 1 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 nhận thêm 1 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ờ cho đến khi luồng được giải phó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 nhận thêm 1 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ờ cho đến khi luồng được giải phóng.
BuiDaiNghia-102C- Tổng số bài gửi : 5
Join date : 21/02/2012
Re: Thảo luận Bài 5
Khái niệm đa luồng. So sánh luồng với tiến trình?
- 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
- 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
nguyenvanhonglac_0066- Tổng số bài gửi : 15
Join date : 16/02/2012
Re: Thảo luận Bài 5
Những mô hình đa luồng:
- Mô hình many-to-One là nhiều user level threads được ánh xạ vào một Kernal 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 kernal thread. Khi có một user thread mới được tạo ra thì cũng cần tạo một kernal 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ố kernal thread. Tránh được các khuyết điểm của hai mô hình trên.
- Mô hình many-to-One là nhiều user level threads được ánh xạ vào một Kernal 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 kernal thread. Khi có một user thread mới được tạo ra thì cũng cần tạo một kernal 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ố kernal thread. Tránh được các khuyết điểm của hai mô hình trên.
nguyenvanhonglac_0066- Tổng số bài gửi : 15
Join date : 16/02/2012
Phân biệt khái niện luồng với tiến trình. Và trình bày những lợi ích của công nghệ đa luồng
BuiDaiNghia-102C đã viết:a) Khái niệm luồng ( thread )
+ Luồng 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 của tiến trình truyền thống ( HWP – Heavy Weight Process ).
+ Một luồng là một dòng xử lý cơ bản trong hệ thống. Mỗi luồng xử lý tuần tự đoạn code của nó, sở hữu một con trỏ lệnh, tập các thanh ghi và một vùng nhớ stack riêng-> luồng bao gồm: mã luồng ( thread ID ) + bộ đếm chương trình ( program counter ) + tập thanh ghi ( register set ) + stack.
b) Khái niệm tiến trình ( process)
+ Việc thực hiện các công việc được mô tả thông qua chương trình-> chương trình hoạt động thì chuyển thành tiến trình-> một tiến trình gồm:mã nguồn chương trình (code ) + data + bộ đếm chương trình ( program counter ) + ngăn xếp ( stack ) + giá trị ở các thanh ghi ( register values )-> một tiến trình cần: cung cấp đầy đủ tài nguyên cần thiết + CPU tiếp nhận và thực hiện.
+ Tiến trình có thể có một luồng chính với nhiều luồng phụ.
c) Phân biệt luồng và tiến trình
+ Luồng được coi là mức thấp hơn của tiến trình, mỗi tiến trình có thể có nhiều luồng.
+ Hoạt động của các luồng giống như tiến trình nhưng các luồng cùng chia sẻ không gian địa chỉ chung, còn các tiến trình thì hoàn toàn độc lập.
d) Trình bày những ích lợi của công nghệ đa luồng.
+ Đáp ứng nhanh ( responsiveness ): cho phép luồng chính tiếp tục được thực hiện thậm chí khi một luồng bị ách hoặc quá bận.
+ Chia sẻ tài nguyên ( resource sharing ): các luồng có thể dùng chung bộ nhớ và tài nguyên của luồng cha, cho phép 1 ứng dụng có 1 số luồng khác nhau hoạt động trong cùng 1 không gian địa chỉ.
+ 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 nên việc tạo lập và chuyển ngữ cảnh cũng nhanh hơn.
+ Tận dụng được thế mạnh của kiến trúc đa xử lý ( multiprocessor ): làm tăng tính song song trên hệ máy nhiều CPU ( processor ).
+ Lập trình đa luồng dễ hơn lập trình đa tiến trình, tạo mới 1 tiến trình vừa lâu vừa khó, tạo mới 1 luồng thì nhanh và dễ hơn.
Mình xin bổ xung thêm:
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 HCTH102C đang học là một tiến trình
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.
nguyenthimao_I12A- Tổng số bài gửi : 35
Join date : 16/02/2012
Trình bày nguyên lý tập luồng và cho ví dụ minh họa
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)
+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)
nguyenthimao_I12A- Tổng số bài gửi : 35
Join date : 16/02/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
Ví Dụ về luồng:
VD1: Các bạn đi trên đường một chiều thì một chiều đó chình là một luồng hay 1 tiến trình, nhưng trong luồng đó người ta phân ra các luồng nhỏ hơn đó là các làn xe ô tô, xe tải, xe máy, và đi bộ. Các làn đó được gọi là một luồng hay 1 tiến trình nhẹ.
VD2: Trong công ty các bạn có : Sếp, thư kí, kế toán, nhân viên văn phòng...... Thì công ty là một luồng lớn hay 1 tiến trình để sản xuất là một sản phẩm gì đó vd như cơ khí, còn những cá thể trong công ty sẽ là một luồng hay một tiến trình nhẹ để xử lý các công việc khác nhau.......
* 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
Ví Dụ về luồng:
VD1: Các bạn đi trên đường một chiều thì một chiều đó chình là một luồng hay 1 tiến trình, nhưng trong luồng đó người ta phân ra các luồng nhỏ hơn đó là các làn xe ô tô, xe tải, xe máy, và đi bộ. Các làn đó được gọi là một luồng hay 1 tiến trình nhẹ.
VD2: Trong công ty các bạn có : Sếp, thư kí, kế toán, nhân viên văn phòng...... Thì công ty là một luồng lớn hay 1 tiến trình để sản xuất là một sản phẩm gì đó vd như cơ khí, còn những cá thể trong công ty sẽ là một luồng hay một tiến trình nhẹ để xử lý các công việc khác nhau.......
Được sửa bởi PhamQuangHien_I12A ngày 29/3/2012, 09:27; sửa lần 1.
PhamQuangHien_I12A- Tổng số bài gửi : 62
Join date : 22/02/2012
Age : 35
Đến từ : Quãng Ngãi
ví dụ minh họa về luồng và tiến trình
* Luồng:
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:
Ví dụ: Lớp I12A đ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:
Ví dụ: Lớp I12A đang học là một tiến trình.
PhamQuangHien_I12A- Tổng số bài gửi : 62
Join date : 22/02/2012
Age : 35
Đến từ : Quãng Ngãi
Giới thiệu một số loại luồng
Luồng Windows 2000
Windows 2000 cài đặt Win32 API. Win32 API là một API chủ yếu cho họ hệ điều hành Windows (Windows 95/98/NT và Windows 2000). Thực vậy, những gì được đề cập trong phần phần này áp dụng tới họ hệ điều hành nàyỨng dụng Windows chạy như một tiến trình riêng rẻ nơi mỗi tiến trình có thể chứa một hay nhiều luồng. Windows 2000 dùng ánh xạ một-một nơi mà mỗi luồng cấp người dùng ánh xạ tới luồng nhân được liên kết tới.Tuy nhiên, Windows cũng cung cấp sự hỗ trợ cho một thư viện có cấu trúc (fiber library) cung cấp chức năng của mô hình nhiều-nhiều. Mỗi luồng thuộc về một tiến trình có thể truy xuất một không gian địa chỉ ảo của tiến trình.Những thành phần thông thường của một luồng gồm:ID của luồng định danh duy nhất luồng Tập thanh ghi biểu diễn trạng thái của bộ xử lý Ngăn xếp người dùng khi luồng đang chạy ở chế độ người dùng. Tương tự, mỗi luồng cũng có một ngăn xếp nhân được dùng khi luồng đang chạy trong chế độ nhân Một vùng lưu trữ riêng được dùng bởi nhiều thư viện thời gian thực và thự viện liên kết động (DLLs).Tập thanh ghi, ngăn xếp và vùng lưu trữ riêng được xem như ngữ cảnh của luồng và được đặc tả kiến trúc tới phần cứng mà hệ điều hành chạy trên đó. Cấu trúc dữ liệu chủ yếu của luồng gồm:RTHREAD (executive thread block-khối luồng thực thi). KTHREAD (kernel thread-khối luồng nhân) TEB (thread environment block-khối môi trường luồng)Các thành phần chủ yếu của RTHREAD gồm một con trỏ chỉ tới tiến trình nào luồng thuộc về và địa chỉ của thủ tục mà luồng bắt đầu điều khiển trong đó. ETHREAD cũng chứa một con trỏ chỉ tới KTHREAD tương ứng.KTHREAD gồm thông tin định thời và đồng bộ hóa cho luồng. Ngoài ra, KTHREAD chứa ngăn xếp nhân (được dùng khi luồng đang chạy trong chế độ nhân) và con trỏ chỉ tới TEB.ETHREAD và KTHREAD tồn tại hoàn toàn ở không gian nhân; điều này có nghĩa chỉ nhân có thể truy xuất chúng. TEB là cấu trúc dữ liệu trong không gian người dùng được truy xuất khi luồng đang chạy ở chế độ người dùng. Giữa những trường khác nhau, TEB chứa ngăn xếp người dùng và một mảng cho dữ liệu đặc tả luồng (mà Windows gọi là lưu trữ cục bộ luồng)
Luồng Linux
Nhân Linux được giới thiệu trong ấn bản 2.2. Linux cung cấp một lời gọi hệ thống fork với chức năng truyền thống là tạo bản sao một tiến trình . Linux cũng cung cấp lời gọi hệ thống clone mà nó tương tự như tạo một luồng. clone có hành vi rất giống như fork, ngoại trừ thay vì tạo một bản sao của tiến trình gọi, nó tạo một tiến trình riêng chia sẻ không gian địa chỉ của tiến trình gọi. Nó chấm dứt việc chia sẻ không gian địa chỉ của tiến trình cha mà một tác vụ được nhân bản đối xử giống rất nhiều một luồng riêng rẻ.Chia sẻ không gian địa chỉ được cho phép vì việc biểu diễn của một tiến trình trong nhân Linux. Một cấu trúc dữ liệu nhân duy nhất tồn tại cho mỗi tiến trình trong hệ thống. Một cấu trúc dữ liệu nhân duy nhất tồn tại cho mỗi tiến trình trong hệ thống. Tuy nhiên, tốt hơn lưu trữ dữ liệu cho mỗi tiến trình trong cấu trúc dữ liệu là nó chứa các con trỏ chỉ tới các cấu trúc dữ liệu khác nơi dữ liệu này được được lưu. Ví dụ, cấu trúc dữ liệu trên tiến trình chứa các con trỏ chỉ tới các cấu trúc dữ liệu khác hiện diện danh sách tập tin đang mở, thông tin quản lý tín hiệu, và bộ nhớ ảo. Khi fork được gọi, một tiến trình mới được tạo cùng với một bản sao của tất cả cấu trúc dữ liệu của tiến trình cha được liên kết tới. Khi lời gọi hệ thống clone được thực hiện, một tiến trình mới chỉ tới cấu trúc dữ liệu của tiến trình cha, do đó cho phép tiến trình con chia sẻ bộ nhớ và tài nguyên của tiến trình cha. Một tập hợp cờ được truyền như một tham số tới lời gọi hệ thống clone. Tập hợp cờ này được dùng để hiển thị bao nhiêu tiến trình cha được chia sẻ với tiến trình con. Nếu không có cờ nào được đặt, không có chia sẻ xảy ra và clone hoạt động giống như fork. Nếu tất cả năm cờ được đặt, tiến trình con chia sẻ mọi thứ với tiến trình cha. Sự kết hợp khác của cờ cho phép các cấp độ chia sẻ khác nhau giữa hai mức độ cao nhất này. Điều thú vị là Linux không phân biệt giữa tiến trình và luồng. Thật vậy, Linux thường sử dụng thuật ngữ tác vụ-hơn là tiến trình hay luồng-khi tham chiếu tới dòng điều khiển trong chương trình. Ngoài tiến trình được nhân bản, Linux không hỗ trợ đa luồng, cấu trúc dữ liệu riêng hay thủ tục nhân. Tuy nhiên, những cài đặt Pthreads là sẳn dùng cho đa luồng cấp người dùng.
Luồng Java
Java là một trong số nhỏ ngôn ngữ cung cấp sự hỗ trợ tại cấp ngôn ngữ cho việc tạo và quản lý luồng. Tuy nhiên, vì các luồng được quản lý bởi máy ảo Java, không bởi một thư viện cấp người dùng hay nhân, rất khó để phân cấp luồng Java như cấp độ người dùng hay cấp độ nhân. Trong phần này chúng ta trình bày các luồng Java như một thay đổi đối với mô hình người dùng nghiêm ngặt hay mô hình cấp nhân.Tất cả chương trình tạo ít nhất một luồng điều khiển đơn. Thậm chí một chương trình Java chứa chỉ một phương thức main chạy như một luồng đơn trong máy ảo Java. Ngoài ra, Java cung cấp các lệnh cho phép người phát triển tạo và thao tác các luồng điều khiển bổ sung trong chương trình.
Windows 2000 cài đặt Win32 API. Win32 API là một API chủ yếu cho họ hệ điều hành Windows (Windows 95/98/NT và Windows 2000). Thực vậy, những gì được đề cập trong phần phần này áp dụng tới họ hệ điều hành nàyỨng dụng Windows chạy như một tiến trình riêng rẻ nơi mỗi tiến trình có thể chứa một hay nhiều luồng. Windows 2000 dùng ánh xạ một-một nơi mà mỗi luồng cấp người dùng ánh xạ tới luồng nhân được liên kết tới.Tuy nhiên, Windows cũng cung cấp sự hỗ trợ cho một thư viện có cấu trúc (fiber library) cung cấp chức năng của mô hình nhiều-nhiều. Mỗi luồng thuộc về một tiến trình có thể truy xuất một không gian địa chỉ ảo của tiến trình.Những thành phần thông thường của một luồng gồm:ID của luồng định danh duy nhất luồng Tập thanh ghi biểu diễn trạng thái của bộ xử lý Ngăn xếp người dùng khi luồng đang chạy ở chế độ người dùng. Tương tự, mỗi luồng cũng có một ngăn xếp nhân được dùng khi luồng đang chạy trong chế độ nhân Một vùng lưu trữ riêng được dùng bởi nhiều thư viện thời gian thực và thự viện liên kết động (DLLs).Tập thanh ghi, ngăn xếp và vùng lưu trữ riêng được xem như ngữ cảnh của luồng và được đặc tả kiến trúc tới phần cứng mà hệ điều hành chạy trên đó. Cấu trúc dữ liệu chủ yếu của luồng gồm:RTHREAD (executive thread block-khối luồng thực thi). KTHREAD (kernel thread-khối luồng nhân) TEB (thread environment block-khối môi trường luồng)Các thành phần chủ yếu của RTHREAD gồm một con trỏ chỉ tới tiến trình nào luồng thuộc về và địa chỉ của thủ tục mà luồng bắt đầu điều khiển trong đó. ETHREAD cũng chứa một con trỏ chỉ tới KTHREAD tương ứng.KTHREAD gồm thông tin định thời và đồng bộ hóa cho luồng. Ngoài ra, KTHREAD chứa ngăn xếp nhân (được dùng khi luồng đang chạy trong chế độ nhân) và con trỏ chỉ tới TEB.ETHREAD và KTHREAD tồn tại hoàn toàn ở không gian nhân; điều này có nghĩa chỉ nhân có thể truy xuất chúng. TEB là cấu trúc dữ liệu trong không gian người dùng được truy xuất khi luồng đang chạy ở chế độ người dùng. Giữa những trường khác nhau, TEB chứa ngăn xếp người dùng và một mảng cho dữ liệu đặc tả luồng (mà Windows gọi là lưu trữ cục bộ luồng)
Luồng Linux
Nhân Linux được giới thiệu trong ấn bản 2.2. Linux cung cấp một lời gọi hệ thống fork với chức năng truyền thống là tạo bản sao một tiến trình . Linux cũng cung cấp lời gọi hệ thống clone mà nó tương tự như tạo một luồng. clone có hành vi rất giống như fork, ngoại trừ thay vì tạo một bản sao của tiến trình gọi, nó tạo một tiến trình riêng chia sẻ không gian địa chỉ của tiến trình gọi. Nó chấm dứt việc chia sẻ không gian địa chỉ của tiến trình cha mà một tác vụ được nhân bản đối xử giống rất nhiều một luồng riêng rẻ.Chia sẻ không gian địa chỉ được cho phép vì việc biểu diễn của một tiến trình trong nhân Linux. Một cấu trúc dữ liệu nhân duy nhất tồn tại cho mỗi tiến trình trong hệ thống. Một cấu trúc dữ liệu nhân duy nhất tồn tại cho mỗi tiến trình trong hệ thống. Tuy nhiên, tốt hơn lưu trữ dữ liệu cho mỗi tiến trình trong cấu trúc dữ liệu là nó chứa các con trỏ chỉ tới các cấu trúc dữ liệu khác nơi dữ liệu này được được lưu. Ví dụ, cấu trúc dữ liệu trên tiến trình chứa các con trỏ chỉ tới các cấu trúc dữ liệu khác hiện diện danh sách tập tin đang mở, thông tin quản lý tín hiệu, và bộ nhớ ảo. Khi fork được gọi, một tiến trình mới được tạo cùng với một bản sao của tất cả cấu trúc dữ liệu của tiến trình cha được liên kết tới. Khi lời gọi hệ thống clone được thực hiện, một tiến trình mới chỉ tới cấu trúc dữ liệu của tiến trình cha, do đó cho phép tiến trình con chia sẻ bộ nhớ và tài nguyên của tiến trình cha. Một tập hợp cờ được truyền như một tham số tới lời gọi hệ thống clone. Tập hợp cờ này được dùng để hiển thị bao nhiêu tiến trình cha được chia sẻ với tiến trình con. Nếu không có cờ nào được đặt, không có chia sẻ xảy ra và clone hoạt động giống như fork. Nếu tất cả năm cờ được đặt, tiến trình con chia sẻ mọi thứ với tiến trình cha. Sự kết hợp khác của cờ cho phép các cấp độ chia sẻ khác nhau giữa hai mức độ cao nhất này. Điều thú vị là Linux không phân biệt giữa tiến trình và luồng. Thật vậy, Linux thường sử dụng thuật ngữ tác vụ-hơn là tiến trình hay luồng-khi tham chiếu tới dòng điều khiển trong chương trình. Ngoài tiến trình được nhân bản, Linux không hỗ trợ đa luồng, cấu trúc dữ liệu riêng hay thủ tục nhân. Tuy nhiên, những cài đặt Pthreads là sẳn dùng cho đa luồng cấp người dùng.
Luồng Java
Java là một trong số nhỏ ngôn ngữ cung cấp sự hỗ trợ tại cấp ngôn ngữ cho việc tạo và quản lý luồng. Tuy nhiên, vì các luồng được quản lý bởi máy ảo Java, không bởi một thư viện cấp người dùng hay nhân, rất khó để phân cấp luồng Java như cấp độ người dùng hay cấp độ nhân. Trong phần này chúng ta trình bày các luồng Java như một thay đổi đối với mô hình người dùng nghiêm ngặt hay mô hình cấp nhân.Tất cả chương trình tạo ít nhất một luồng điều khiển đơn. Thậm chí một chương trình Java chứa chỉ một phương thức main chạy như một luồng đơn trong máy ảo Java. Ngoài ra, Java cung cấp các lệnh cho phép người phát triển tạo và thao tác các luồng điều khiển bổ sung trong chương trình.
PhamQuangHien_I12A- Tổng số bài gửi : 62
Join date : 22/02/2012
Age : 35
Đến từ : Quãng Ngãi
Ví dụ về Đa Luồng trong C#
1. Sơ qua về luồng (Thread)
Bài viết này mình sẽ hướng dẫn cho các bạn mới tìm hiểu về đa luồng và ứng dụng của nó và được mô tả trên ngôn ngữ C# cho dễ hiểu. Trước tìm hiểu nó cũng vất vả vì nó khó hiểu giờ muốn giúp chút xíu gì đó cho các bạn (Bạn sẽ cảm thấy vô cùng đơn giản nếu làm việc nhiều với nó, đó chỉ là do kỹ năng của mình yếu lên cảm thấy phức tạp)
Một luồng là một chuỗi liên tiếp những sự thực thi (mã lệnh hay câu lệnh) trong chương trình (ứng dụng). Trong một chương trình C#, dễ thấy việc thực thi được bắt đầu bằng phương thức main() và tiếp tục cho đến khi kết thúc hàm main(). Cấu trúc này rất hay cho những chương trình có một chuỗi xác định những nhiệm vụ liên tiếp, nhưng thường thì trong một chương trình ứng có nhiều hơn một công việc vào cùng một lúc. Một ví dụ rất hay và khá thực tế mà mình thấy trên diễn đàn tin học của "can_qua", các bạn cùng tham khảo
Vấn đề quan trọng là bạn phải tìm ra một cách nào đó để chia một công việc lớn thành những công việc nhỏ mà trong đó có những việc có thể thực hiện một cách đồng thời. Ví dụ, mẹ giao việc cho con là "làm việc xong mới được đi coi xi-nê". "Công việc lớn" này có thể gồm 3 việc nhỏ "quét nhà", "rửa chén", và đi coi "xi-nê". Trong đó chỉ được "coi xi-nê" sau khi làm xong hai việc kia. Rõ ràng là bạn muốn làm xong việc nhà càng sớm càng tốt để vi vút, nên bạn kêu thằng em bạn quét nhà, bạn thì rửa chén, cả hai người cùng làm đồng thời. Rửa chén xong trước, bạn phải đợi thằng em bạn thông báo là quét nhà cũng xong thì bạn mới vù đi coi xi-nê được. Như vậy multithread cho "rửa chén" và "quét nhà" làm tăng hiệu suất thực hiện công việc của bạn (so với việc bạn làm tuần tự rửa chén, quét nhà, coi xi-nê).
2. Ví dụ nhỏ về đa luồng
Ví dụ này mình sẽ mô tả 2 luồng (cho đơn giản) được thực thi cùng một lúc.
Ở đây thì bạn cứ tưởng tượng ra rằng có hai thằng tên là A và B thi đếm từ 0 cho đến 100, thằng nào đếm xong trước thì báo cáo và được về chỗ. Tương ứng mình sẽ tạo ra 2 phương thức A() và B() (mỗi luồng sẽ xử lý một thằng).
Có nhiều cách truyền tham số, tuỳ theo nhu cầu mà dùng sao cho phù hợp
Thông qua phương thức Start(object) thì bạn có thể truyền tham số theo cách này.
Ví dụ:
Bạn hãy tham khảo về nó tại đây: http://dotnetperls.com/threadpool
Chờ đợi một luồng khác
Bằng việc sử dụng phương thức Join(); ta có thể cho phép chờ đợi một luồng khác thực hiện xong (để thu thập dữ liệu chẳng hạn - do chia nhỏ công việc mà), thì luồng đã gọi nó mới tiếp tục được công việc của nó
nghĩa là, sau 10s mà ThreadProc chưa làm xong việc của nó thì Main thread không chờ nữa, tiếp tục công việc khác
Admin
Cụ thể hơn: Luồng chính chờ luồng con kết thúc trong khoảng 10 giây. Nếu luồng con xong sớm hơn hoặc quá 10 giây thì lệnh kế tiếp (đi sau) lệnh t.Join(10000) sẽ được thực hiện.
Bài viết này mình sẽ hướng dẫn cho các bạn mới tìm hiểu về đa luồng và ứng dụng của nó và được mô tả trên ngôn ngữ C# cho dễ hiểu. Trước tìm hiểu nó cũng vất vả vì nó khó hiểu giờ muốn giúp chút xíu gì đó cho các bạn (Bạn sẽ cảm thấy vô cùng đơn giản nếu làm việc nhiều với nó, đó chỉ là do kỹ năng của mình yếu lên cảm thấy phức tạp)
Một luồng là một chuỗi liên tiếp những sự thực thi (mã lệnh hay câu lệnh) trong chương trình (ứng dụng). Trong một chương trình C#, dễ thấy việc thực thi được bắt đầu bằng phương thức main() và tiếp tục cho đến khi kết thúc hàm main(). Cấu trúc này rất hay cho những chương trình có một chuỗi xác định những nhiệm vụ liên tiếp, nhưng thường thì trong một chương trình ứng có nhiều hơn một công việc vào cùng một lúc. Một ví dụ rất hay và khá thực tế mà mình thấy trên diễn đàn tin học của "can_qua", các bạn cùng tham khảo
Vấn đề quan trọng là bạn phải tìm ra một cách nào đó để chia một công việc lớn thành những công việc nhỏ mà trong đó có những việc có thể thực hiện một cách đồng thời. Ví dụ, mẹ giao việc cho con là "làm việc xong mới được đi coi xi-nê". "Công việc lớn" này có thể gồm 3 việc nhỏ "quét nhà", "rửa chén", và đi coi "xi-nê". Trong đó chỉ được "coi xi-nê" sau khi làm xong hai việc kia. Rõ ràng là bạn muốn làm xong việc nhà càng sớm càng tốt để vi vút, nên bạn kêu thằng em bạn quét nhà, bạn thì rửa chén, cả hai người cùng làm đồng thời. Rửa chén xong trước, bạn phải đợi thằng em bạn thông báo là quét nhà cũng xong thì bạn mới vù đi coi xi-nê được. Như vậy multithread cho "rửa chén" và "quét nhà" làm tăng hiệu suất thực hiện công việc của bạn (so với việc bạn làm tuần tự rửa chén, quét nhà, coi xi-nê).
2. Ví dụ nhỏ về đa luồng
Ví dụ này mình sẽ mô tả 2 luồng (cho đơn giản) được thực thi cùng một lúc.
Ở đây thì bạn cứ tưởng tượng ra rằng có hai thằng tên là A và B thi đếm từ 0 cho đến 100, thằng nào đếm xong trước thì báo cáo và được về chỗ. Tương ứng mình sẽ tạo ra 2 phương thức A() và B() (mỗi luồng sẽ xử lý một thằng).
- Code:
void A()
{
for(int i=0; i<=100; i++)
{
Console.WriteLine(i.ToString());
}
Console.WriteLine("A đã đọc xong"); // Báo cáo đã đọc xong
}
void B()
{
for(int i=0; i<=100; i++)
{
Console.WriteLine(i.ToString());
}
Console.WriteLine("B đã đọc xong"); // Báo cáo đã đọc xong
}
- Code:
static void main()
{
ThreadStart ts1 = new ThreadStart(A); // Chỉ định thằng A lên đọc
ThreadStart ts2 = new ThreadStart(B); // Chỉ định thằng B lên đọc
// Sẵn sàng cho cuộc đấu (thi đếm nhanh :D)
Thread tA = new Thread(ts1);
Thread tB = new Thread(ts2);
// Bắt đầu bấm giờ
tA.Start();
tB.Start();
tA.Join();
tB.Join();
// Hai thằng tranh nhau đếm
Console.WriteLine("Cuộc thi kết thúc"); // Chờ đến khi 2 thằng đọc xong, không biết thằng nào sẽ thắng :D
Console.ReadLine();
}
// Thư viện tham chiếu nằm trong namespace System.Threading;
// Bạn cần khai báo sử dụng nó using Sytem.Threading;
Có nhiều cách truyền tham số, tuỳ theo nhu cầu mà dùng sao cho phù hợp
Thông qua phương thức Start(object) thì bạn có thể truyền tham số theo cách này.
Ví dụ:
- Code:
using System;
using System.Threading;
class ThreadSample
{
public static void Main()
{
Thread newThread = new Thread(ThreadSample.DoWork);
newThread.Start(100); // Dữ liệu truyền vào là một số nguyên
// Để Start luồng sử dụng phương thức thể hiện (instance method)
// thì trước tiên ta cần khởi tạo nó trước khi gọi
ThreadSample worker = new ThreadSample();
newThread = new Thread(worker.DoMoreWork);
newThread.Start("Truyền đối tượng cho thread thực thi");
// Nếu biết trước được đối tượng truyền vào thì ta cần ghép kiểu cho nó
// để việc sử dụng được hiệu quả hơn
}
public static void DoWork(object data)
{
Console.WriteLine("Ðây là luồng tĩnh.");
Console.WriteLine("Dữ liệu truyền vào: Data = {0}", data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Đây là luồng cần được khởi tạo");
Console.WriteLine("Dữ liệu truyền vào là: Data = {0}", data);
}
}
- Code:
ThreadPool.QueueUserWorkItem(new WaitCallback(_ThreadProc), _Param);
Bạn hãy tham khảo về nó tại đây: http://dotnetperls.com/threadpool
Chờ đợi một luồng khác
Bằng việc sử dụng phương thức Join(); ta có thể cho phép chờ đợi một luồng khác thực hiện xong (để thu thập dữ liệu chẳng hạn - do chia nhỏ công việc mà), thì luồng đã gọi nó mới tiếp tục được công việc của nó
- Code:
static void Main(string[] args)
{
Console.WriteLine("Main thread: Gọi luồng thứ 2 ThreadProc()...");
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
for (int i = 0; i < 50; i++)
{
Console.WriteLine("Main thread: Do Some Work.");
Thread.Sleep(0);
}
Console.WriteLine("Main thread finished: And call t.Join()");
Console.WriteLine("Main thread tạm thời đang được dừng lại");
t.Join(); // Dừng tại đây
// Sau khi ThreadProc hoàn tất Main thread tiếp tục công việc của nó
// Tiếp tục thực thi 3 dòng lệnh tiếp theo
Console.WriteLine("Thread.Join() has returned.");
Console.WriteLine("Main đã làm xong việc");
Console.ReadLine();
}
public static void ThreadProc()
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine("ThreadProc: {0}", i);
Thread.Sleep(0);
}
}
- Code:
t.Join(10000);
nghĩa là, sau 10s mà ThreadProc chưa làm xong việc của nó thì Main thread không chờ nữa, tiếp tục công việc khác
Admin
Cụ thể hơn: Luồng chính chờ luồng con kết thúc trong khoảng 10 giây. Nếu luồng con xong sớm hơn hoặc quá 10 giây thì lệnh kế tiếp (đi sau) lệnh t.Join(10000) sẽ được thực hiện.
HoNguyenQuocTuy(I12A)- Tổng số bài gửi : 11
Join date : 21/02/2012
Age : 35
Đến từ : An Khê - Gia Lai
Re: Thảo luận Bài 5
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.
+Tập luồng giống nhau cùng chung chức năng.
Ví dụ:
Tập luồng bao gồm các nhà sản xuất.Khi tạo lập xong chưa có việc thì sẽ nghỉ.
+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.
+Tập luồng giống nhau cùng chung chức năng.
Ví dụ:
Tập luồng bao gồm các nhà sản xuất.Khi tạo lập xong chưa có việc thì sẽ nghỉ.
TrinhVinhThanh (I12A)- Tổng số bài gửi : 10
Join date : 18/02/2012
ví dụ về tập luồng và đa luồng
Tập luồng:
_Ví dụ: Trang bị sẵn sàng cho cả nhóm lính mặc áo giáp cầm súng nằm ngủ, nhưng nếu 1 tên địch tiến đến thì người lính bắt đầu dậy tiến hành công việc một cách nhanh chóng. nếu có 2 tên địch thì người lính thứ 2 sẽ lên chiến đấu. Và khi đã chiến đấu xong thì lính lại trở về trạng thái nằm ngủ để đợi công việc tiếp theo.
Đa luồng:
_Ví dụ :lập trình xử lý công việc bán vé máy bay và gửi và rút tiền ở ngân hàng đều cần đến công nghệ này.
_Ví dụ: Trang bị sẵn sàng cho cả nhóm lính mặc áo giáp cầm súng nằm ngủ, nhưng nếu 1 tên địch tiến đến thì người lính bắt đầu dậy tiến hành công việc một cách nhanh chóng. nếu có 2 tên địch thì người lính thứ 2 sẽ lên chiến đấu. Và khi đã chiến đấu xong thì lính lại trở về trạng thái nằm ngủ để đợi công việc tiếp theo.
Đa luồng:
_Ví dụ :lập trình xử lý công việc bán vé máy bay và gửi và rút tiền ở ngân hàng đều cần đến công nghệ này.
hoanggiangI12C- Tổng số bài gửi : 24
Join date : 15/02/2012
Câu 1: Phân tích những đặc điểm của luồng và so sánh khái niệm với tiến trình. Những tính ưu việc của công nghệ đa luồng
• 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)
• So sánh giữa luồng và tiến trình:
Giống nhau: luồng cũng là một đơn vị cấp phát CPU bởi hệ điều hành
Khác nhau: luồng là một bộ phận tiến trình truyền thống.
Những tính ưu việ 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 1080 là các luồng. Khi khách hàng điện thoại hỏi 1080, 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 1080, 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.
Mong các bạn đóng góp thêm ý kiến
• So sánh giữa luồng và tiến trình:
Giống nhau: luồng cũng là một đơn vị cấp phát CPU bởi hệ điều hành
Khác nhau: luồng là một bộ phận tiến trình truyền thống.
Những tính ưu việ 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 1080 là các luồng. Khi khách hàng điện thoại hỏi 1080, 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 1080, 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.
Mong các bạn đóng góp thêm ý kiến
NguyenHoangThangI12A- Tổng số bài gửi : 34
Join date : 15/02/2012
Bài 5
Câu 2: Trình bày nguyên lý tập nguồn và cho ví dụ minh họa
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)
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)
NguyenHoangThangI12A- Tổng số bài gửi : 34
Join date : 15/02/2012
Tại sao phải dùng code chung?
Thầy hỏi tai sao nên dùng code chung và dùng có chung có ưu điểm gì: .Có bạn trả lời rằng là dễ quản lý.Thầy nói đúng nhưng chưa chính xác lắm.và thầy nói nếu có sữa code thì thầy chỉ sửa 1 lần .Nếu sữa code riêng lẽ thì phải sữa rất nhiều. Còn theo em thì sử dụng 1 code chung sẽ dễ đồng bộ và dễ quản lý hơn. Tuy nhiên ở thực tế ta nên dùng 2-3 code chung để giả sử có bị virus hay bị 1 ai đó thay đổi code thì vẫn còn các code khác để sử dụng.
hoanggiangI12C- Tổng số bài gửi : 24
Join date : 15/02/2012
Khả năng đáp ứng của Đa Luồng(MultiThread)
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.
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.
NguyenThiHongYen(I12A)- Tổng số bài gửi : 20
Join date : 20/02/2012
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.
NgoPhuQuoc_I12C- Tổng số bài gửi : 13
Join date : 16/02/2012
Khái niệm đa luồng và so sánh luồng với tiến trình
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 SANH:
- 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 SANH:
- 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
LeThanhTung (I11C)- Tổng số bài gửi : 50
Join date : 28/08/2011
Re: Thảo luận Bài 5
PhamQuangHien_I12A đã viết:* Luồng:
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:
Ví dụ: Lớp I12A đang học là một tiến trình.
Mình xin bổ sung thêm:
Giáo viên là luồng chính điều phối tất cả công việc trong lớp học. Mỗi học viên là luồng phụ có tiếp thu kiến thức như nhau.
luthioanh-I12A- Tổng số bài gửi : 29
Join date : 17/02/2012
Age : 39
Re: Thảo luận Bài 5
hoanggiangI12C đã viết:Thầy hỏi tai sao nên dùng code chung và dùng có chung có ưu điểm gì: .Có bạn trả lời rằng là dễ quản lý.Thầy nói đúng nhưng chưa chính xác lắm.và thầy nói nếu có sữa code thì thầy chỉ sửa 1 lần .Nếu sữa code riêng lẽ thì phải sữa rất nhiều. Còn theo em thì sử dụng 1 code chung sẽ dễ đồng bộ và dễ quản lý hơn. Tuy nhiên ở thực tế ta nên dùng 2-3 code chung để giả sử có bị virus hay bị 1 ai đó thay đổi code thì vẫn còn các code khác để sử dụng.
Nếu sử dụng 2-3 code thì sẽ cung cấp một lần là chia ra một nhóm sử dụng một loại code hay đợi đến khi bị Virus tấn công mới cung cấp code khác.
luthioanh-I12A- Tổng số bài gửi : 29
Join date : 17/02/2012
Age : 39
Trang 1 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Trang 1 trong tổng số 9 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết