进程和线程的区别(用户线程和内核线程区别)

就操作系统而言,进程是整个现代操作系统的基础,操作系统以进程为单位执行任务。随着技术的发展,当执行一些小任务,不需要分配个体资源时,进程的实现机制仍然会以繁琐的

进程和线程的区别(用户线程和内核线程区别)插图

就操作系统而言,进程是整个现代操作系统的基础,操作系统以进程为单位执行任务。随着技术的发展,当执行一些小任务,不需要分配个体资源时,进程的实现机制仍然会以繁琐的方式划分资源,造成浪费和时间消耗,于是产生了一种特殊的多任务技术——线程。线程的特点是不需要独立的资源就可以运行。这将大大节省资源开销和处理时间。

进程和线程的主要区别在于它们是操作系统资源管理的不同方式。进程有独立的地址空。在一个进程崩溃后,它不会影响保护模式下的其他进程,但线程只是一个进程中不同的执行路径。线程有自己的栈和局部变量,但是线程之间没有单独的地址空,所以多进程程序比多线程程序更健壮。然而,在进程切换中,它消耗更多的资源,效率更低。但是对于一些需要同时执行,共享一些变量的并发操作,只能用线程,不能用进程。

我们有以下对比图片:

进程和线程的区别(用户线程和内核线程区别)插图(1)

但是对于Linux来说,它只支持轻量级进程,不支持线程。对于Linux:

系统启动后的 第一个进程是 init,它的 PID 是 1。init 是唯一一个由系统内核直接运行的进程。除了 init 之外,每个进程都有 父进程(PPID 标识)每个进程还有四个 与用户和组相关的识别号实际用户识别号 (real user ID,RUID)实际组识别号 (real group ID,RGID)有效用户识别号 (effect user ID,EUID)有效组识别号 (effect group ID,EGID)

在Linux内核2.4版之前,线程的实现和管理完全是按照进程模式来实现的。2.6版内核之后,有了单独的线程实现。为了弥补不支持线程的缺陷,Linux引入了线程组的概念,即该组中第一个轻量级进程的PID,存储在进程描述符的tgid字段中。getpid()系统调用返回当前进程的tgid值,而不是pid值,因此多线程应用程序的所有线程共享同一个pid。

如果是从面试的角度,有哪些需要注意的点?

进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

作者:Nova

声明:本文版权归利口所有。如需转载请联系我们。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/215444.html

发表回复

登录后才能评论