进程和线程

一.进程和线程的概念:

进程是资源分配的最小单位,线程是CPU调度的最小单位。
进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

进程:

就是上下文切换之间的程序执行的部分。是运行中的程序的描述,也是对应于该段CPU执行时间的描述。

线程:

是共享了进程的上下文环境,的更为细小的CPU时间段。线程主要共享的是进程的地址空间。
这里描述的进程线程概念和实际代码中所说的进程线程是有区别的。编程语言中的定义方式仅仅是语言的实现方式,是对进程线程概念的物化。
在软件编码方面,我们说的进程,其实是稍不同的,编程语言中创建的进程是一个无限loop,对应的是tcb块。这个是操作系统进行调度的单位。所以和上面的cpu执行时间段还是不同的。
进程,与之相关的东西有寻址空间,寄存器组,堆栈空间等。即不同的进程,这些都不同,从而能相互区别。


二.关于线程的调度:

现代的大多数操作系统都不是实时操作系统,Windows系统也是如此。
所以不能奢望线程会立即启动,Windows内部会实现特殊的算法进行线程间调度,在某个时刻它会决定运行哪个线程,反映到底层就是某个线程分配到了一小段CPU时间,来执行一小段工作。
线程的调度是个复杂的过程,对于c#开发者来说,需要理解的是:线程之间的调度占有一定时间和空间的开销,并且不实时。

线程空间开销:

1.线程内核对象Thread Kernel Object,每个线程都会创建一个对象,主要包含线程上下文信息,(32位系统中占用内存700字节)。
2.线程环境块Thread Environment Block,包括线程的异常处理链,32位系统中占用4kb内存。
3.用户模式栈User Mode Stack,即线程栈,用于保存方法的参数、局部变量和返回值,每个线程栈占用1024kb内存。
4.内核模式栈Kernel Mode Stack,当调用操作系统的内核模式函数时,系统会将函数参数从用户模式栈复制到内核模式栈,32位系统中占用12kb内存。

线程时间开销:

1.线程创建时,系统相继初始化以上内存空间。
2.接着CLR会调用所有加载DLL的DLLMain方法,并传递连接标志(线程终止时,也会调用DLL的DLLMain方法,并传递分离标志)。
3.线程上下文切换,一个系统会加载很多进程,而一个进程又包含多个线程。但是一个cpu在任何时候都只能有一个线程在执行,为了让每个线程看上去都在运行,系统会不断切换”线程上下文“:每个线程大概得到几十毫秒的执行时间。这个过程大概分为5个步骤:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值