1 / 22

MULTI-THREADING PROGRAMMING Csharp

MULTI-THREADING PROGRAMMING Csharp. (LẬP TRÌNH ĐA LUỒNG). NỘI DUNG. Các khái niệm vê ̀ Thread Tạo va ̀ diều khiển Thread Tạo Thread Truyền dữ liệu cho Thread Đô ̣ ưu tiên của Thread Các vấn đê ̀ của Thread Vấn đê ̀ Race Condition Vấn đê ̀ Deadlock

zaria
Download Presentation

MULTI-THREADING PROGRAMMING Csharp

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MULTI-THREADING PROGRAMMINGCsharp (LẬP TRÌNH ĐA LUỒNG)

  2. NỘI DUNG • Cáckháiniệmvề Thread • Tạovà diềukhiển Thread • Tạo Thread • Truyềndữliệucho Thread • Độ ưutiêncủa Thread • Cácvấnđề của Thread • Vấnđề Race Condition • Vấnđề Deadlock • Cáckỹthuậtđồngbộ

  3. Thread (concurrent programming) LậpTrìnhĐồngThời multiple threads

  4. Thread (concurrent programming) LậpTrìnhĐồngThời • Thread: Làmộtphần code cóthểthựchiệnđượctrongchươngtrình • Mộtứngdụnglàmộttậphợpnhiềunhiệmvụ(Task), mỗinhiệmvụđượcgánchomột Thread • Nhiều Thread đượcthựchiệnđồngthờiđượcgọilà Multiple Threading

  5. Thread (concurrent programming) LậpTrìnhĐồngThời • Khimộtứngdụng C# ở phía client đượcthựcthithìmột thread đượctựđộngtạorabởi CLR gọilà Main thread. • Từ Main thread tacóthểtạoracác Thread khác. • CLR cấpchomỗi Thread mộtvùngnhớriêngđểlưucácbiếncụcbộcủanó.

  6. Ứngdụngcủa Thread • Duytrìsựđápứngcủagiaodiệnđốivớithaotáccủangườidùng • Sửdụng CPU hiệuquảhơn • Chươngtrìnhthựchiệnnhanhhơn • Cho phépcácyêucầucóthểxửlýđồngthời

  7. TạoThreads • Tạomộtđốitượngthuộc class Thread vàtruyềnchonóphươngthứcsẽthựchiệnkhi Thread bắtđầuthựcthi (start) • Gọiphươngthức start đểbắtđầumột Thread • Truyềnthamsốcho Thread: • Thông qua phươngthức start (chỉdùngđượckhiphươngthứccó 1 thamsốkiểu Object) • Dùngbiểuthức Lambda khitạođốitượng (Phươngthứccósốthamsốvàkiểudữliệutùy ý)

  8. Tạo Threads (cont.) • Vídụ: Tạo, thựchiện Thread

  9. Tạo Threads (cont.) • Vídụ: Tạovàthựchiện Thread

  10. Phươngthức Join • Join: yêucầu “call thread” phảichờcác “called thread” kếtthúcrồimớikếtthúc • Vídụ: Khôngsửdụng join

  11. Phươngthức Sleep • Vídụ: sửdụngphươngthức join

  12. Phươngthức Sleep • Tạmdừng thread hiệntạitrongmộtkhoảngthờigian (tinhbằngmilisecond) • Khimột thread ở trạngthái sleep thìcpuđượcdùngbởi Thread khác • Vídụ: Khôngdùng sleep

  13. Phươngthức Sleep • Vídụ: Sửdụngthread.Sleep

  14. Độưutiêncủa Thread (Thread Priority) • Cho phépHệđiềuhànhquyếtđịnh: • Thờigiansửdụng CPU của Thread • Cơhộinhậnquyềnsửdụng CPU • Độưutiênđượcgánbằngmộttrongcácgiátrịcủaenum: • Vídụ:

  15. Hợpnhấtcác Thread (Thread Pooling) • Cho phépquảnlýcác Thread hiệuquảhơn • Quyếtđịnhkhinàothì start một thread • Cho phép qui địnhsố Thread tốiđa, tốithiểucóthểthựchiệnđồngthời

  16. Cácvấnđềkhisửdụng Thread (Threading Issues ) • Race Condition: Xuấthiệnkhihai hay nhiều Thread truyxuấtcùngmộttàinguyêntạicùngmộtthờiđiểm. • Vídụ: Xuấtthôngbáokhi state!=6

  17. Cácvấnđềkhisửdụng Thread (Threading Issues ) • Race Condition: • Tạo 20 Thread, mỗi Thread sẽthựchiệnhàmRaceCondition , thamsốtruyềncho 20 Thread làđốitượng state dẫnđến Race Condition • Nguyênnhân?

  18. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Đểtránhtìnhtrạng Race Codition sửdụnggiảiphápđộngbộ (Synchronization). • Synchronization: một Thread khimuốnsửdụngmộttàinguyên (nếuchưasửdụngbởinhững Thread khác), nósẽ lock tàinguyênđóchođếnkhisửdụngxong. Các thread khácmuốnsửdụngtàinguyênnàyphảichờđếnkhitàinguyênđược unlock.

  19. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Dùngcơchế Locking đểđồngbộ: Lock trênmộtđốitượngtrướckhithựchiệnlệnh Unlock đốitượngkhithựchiệnxong

  20. Cácvấnđềkhisửdụng Thread (Threading Issues ) Đồngbộgiữacác Thread (Synchronization ): • Đốitượngdùngtrong Lock: • Visible chotấtcảcácphầncủa Thread (thườngkhaibáotrong class) • Phảicókiểulà reference • Pham vi trong class: Private, Readonly

  21. Cácvấnđềkhisửdụng Thread (Threading Issues ) Deadlock :xảyrakhihai Thread cùngchờđểsửdụngtàinguyênđang lock bởi Thread kia (Thread 1 cố lock đốitượngđangsửdụngbởi Thread 2 vàngượclại) • Đểngănchặn Deadlock: DùngMonitor.TryEntervới timeout

  22. Cơchế Wait-Notify • Dùngđểđiềukhiểnsựphốihợpgiữacác Thread • Bàitoán Producer-Consumer (sảnxuất – Tiêuthụ) • C# dùngđốitượngcủalớpEventWaitHandleđểcàiđặtcơchếWait-Notify • CácphươngthứccủaEventWaitHandle: • WaitOne: Block Thread hiệntại, chođếnkhinhậnđược Notify từmột Thread khác • Set: Notify các Thread đang ở chếđộ waiting • Vídụ: xemvídụnonWaitNotifyvàThreadWaitNotify • (dong boket hop phoi hop)

More Related