当前位置: 技术问答>linux和unix
关于线程和进程
来源: 互联网 发布时间:2017-02-04
本文导语: 最近在看《现代操作系统》,看完了process 和 thread 有点晕,特来请教大家。 1)书上讲线程分为 user-level thread 和 kernel-level thread。说 user-level thread 因为没有时钟中断而在切换线程上会很困难,kernel-level thread...
最近在看《现代操作系统》,看完了process 和 thread 有点晕,特来请教大家。
1)书上讲线程分为 user-level thread 和 kernel-level thread。说 user-level thread 因为没有时钟中断而在切换线程上会很困难,kernel-level thread没有这方面的问题,但是会增加CPU的开销。
我的问题就是,为什么 kernel-level thread 开销会很大???我认为只要是涉及到切换任务的问题,开销都应该一样的啊(很明显,我的想法是错滴)
2)在用程序实现上,这两种有什么区别,或者说这两种方式是怎么实现的?
3)书上原文“with kernel-level threads, having a thread block on I/O does not suspend the entire process as it does with user-level threads”为什么会有这两种不同的结果的产生???
求大牛出来解释,不胜感激~~
1)书上讲线程分为 user-level thread 和 kernel-level thread。说 user-level thread 因为没有时钟中断而在切换线程上会很困难,kernel-level thread没有这方面的问题,但是会增加CPU的开销。
我的问题就是,为什么 kernel-level thread 开销会很大???我认为只要是涉及到切换任务的问题,开销都应该一样的啊(很明显,我的想法是错滴)
2)在用程序实现上,这两种有什么区别,或者说这两种方式是怎么实现的?
3)书上原文“with kernel-level threads, having a thread block on I/O does not suspend the entire process as it does with user-level threads”为什么会有这两种不同的结果的产生???
求大牛出来解释,不胜感激~~
|
线程的实现有两种,一种是内核实现,一种是语言层次实现的,比如java的多线程或是glibc的pthread库,由于运行在不同的状态,所以出现2种情况
|
不了解user-level thread 和 kernel-level thread的区别,
但是第三点,在linux上,一个线程阻塞了,并不会阻塞整个进程啊!难道是操作系统不一样?在linux上,线程又叫轻量级进程,与进程的区别在于地址空间是否独立。
但是第三点,在linux上,一个线程阻塞了,并不会阻塞整个进程啊!难道是操作系统不一样?在linux上,线程又叫轻量级进程,与进程的区别在于地址空间是否独立。
|
linux下进程比较好用,windows下线程比较好用
|
说说我的理解:内核态的线程运行在内核态,需要内核去调度,比较繁杂,而用户态的线程运行在用户态调度,内核应该不知情或是不感兴趣,因此不增加CPU开销。
|
内核态有时钟在走,最简单的进程调度策略就是按时间优先,或按时间片轮流运行或切换进程;
用户态进程,需要用户自己来切换,如果用户不能够获得时钟中断,用户就不知何时应该切换进程。
用户态进程,需要用户自己来切换,如果用户不能够获得时钟中断,用户就不知何时应该切换进程。