线程区别

死锁:1.占有且等待;2.循环等待;3.互斥;4.不可抢占。

sleep:让线程处于休眠状态,占用尽可能少的CPU内存时间

线程等待

终止线程

检测线程状态

线程优先级

前台线程与后台线程:初始化的线程不说明是后台,默认定为前台线程,isBackground定义成后台线程。后台线程会在进程结束后直接结束,进程等待所有前台线程完成后再结束工作,但如果只剩后台线程,就会直接结束工作。

线程锁

线程同步:尽可能避免在多个线程间使用单一对象。

将等待的线程置于阻塞状态。尽可能占用少的CPU线程调度器会保持等待的线程状态;需要消耗相当多的资源。若线程要被挂起很长时间,这么做就值得。又被称为内核模式。

使用Mutex类,同步单独的程序,Mutex只对一个线程授予对共享资源的独占访问。

使用SemaphoreSilm类,

使用AutoResetEvent类:一个线程向另一个线程发送通知,可以通知等待的线程有某事发生。

ManualResetEventSlim:set方法用来打开大门允许准备好的线程接收信号并继续工作;reset用来关闭大门。

CountDownEvent类:

ReaderWriterLockSlim类:创建线程安全的机制(安全的对文件读写),读锁允许多线程读取数据,写锁允许在被释放前会阻塞了其他线程的所有操作。

线程池:通过System.Threading.ThreadPool类型可以使用线程池使用线程池来执行异步操作。

线程池和并行度:不为每个操作创建一个线程,而将操作放入到线程池中。然后线程池开始执行这些操作。

ContinueWith:通过任务,可以指定在任务完成之后,应开始运行之后另一特定任务。

线程池中的线程由系统进行管理,程序不需要费力于线程管理,可以集中精力处理应用程序任务。线程池都是后台线程,每个线程都使用默认堆栈大小,以默认的优先级运行,并处于多线程的任务。

线程池适用于执行一些需要多个线程的任务。

优化任务执行过程,提高吞吐量。

多线程两种情况:1.应用程序中,等待回应,用ThreadPool;2.平时线程处于休眠,周期性唤醒用Timer。

invoke会阻塞当前线程知道invoke调用结,才会继续执行下去;而BeginInvoke则可以异步进行调用EndInvoke方法检测异步调用结果,如果未完成则阻塞,直到其完成。

并行运行任务:Task.WhenAll()指当完成所有任务;Task.WhenAny()指当完成任意任务。

 

posted @   Wen_Chen  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示