线程基础,线程池 clr via c# 读书笔记(1)

windows 线程 与CLR线程

如图所示,在windows运行中,存在172个进程,2589个线程。并且CPU的利用率是7%。

一个进程中至少包含一个线程。

在windows 中进程是十分昂贵的 ,创建进程需要花几秒钟时间,且对应的需要分配大量内存,这些内存需要初始化。 相反线程创建非常廉价,所以开发人员停止进程的创建,改为创建线程。从这里开始慢慢的有了多线程,线程池等概念。

PS 虽然线程比进程廉价,但线程比其他系统资源相比仍然十分昂贵,所以还是要省着点用,而且要用的恰当。

 

使用线程的理由

可响应性: 主要是对类似于winform gui程序确保在程序发生死循环等响应耗时比较长的状态下,浪费资源损害性能,用线程可以提高性能,和ui的灵敏性、

性能:

windows 被称为抢占式多线程操作系统,线程可在任何时间停止(被抢占)并调度另一个线程。

windows 支持6个进程优先级类:Idle ,Normal ,Above Normal,High 和Realtime.只有必要的时候使用High优先级, Realttime尽量避免使用,因为其会影响磁盘IO 和网络传输。

windows 支持7个相对线程优先级:Idle,Lowest,Below Normal,Normal,AboveNormal,Highest和Time-Critical。

你的应用程序可以修改其线程的相对线程优先级,这需要设置Thread 的Priority属性,向其传递ThreadPriority ,Lowest,Below Normal,Normal,AboveNormal,Highest。

 

前台线程与后台线程

CLR 将每个线程要么视为前台线程,要么视为后台线程。一个进程的所有前台线程停止运行时,CLR将会强制终止仍然在运行的所有后台线程,不抛出任何异常。

线程设置为后台线程 只需要将实例化的Thread 对象的属性 t.IsBackground为true。

线程池默认为 后台线程

posted on 2020-09-14 20:02  Ssumer  阅读(106)  评论(0编辑  收藏  举报

导航