线程和进程的联系和区别

1)最主要的就是进程是操作系统资源分配的最小单位,每个进程有自己的独立的地址空间(用户空间)。而一个进程中的所有信息对该进程所有的线程都是共享的包括进程的程序文本,程序的全局内存和堆内存、栈以及文件描述符(这是最根本的区别,也是其他区别的原因)

2)线程包含了表示进程内执行环境必须的信息,其中包括进程中标识线程的线程id 、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、erron变量。

3)效率上来讲,创建(创建的时候时间、资源上线程都比进程较好,创建一个进程时候要分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,而而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间),销毁,切换(进程与进程,线程与线程)的时候,线程的效率比进程的效率高,主要原因是因为第一点,一个进程的多个线程大部分的信息都是共享的。

4)多进程与多线程并行处理的时候,一般而言多线程的程序的效率较高,不仅是因为创建和切换快,多线程间通信也方便,可以直接通过共享的信息来通信,而多进程通信就稍麻烦些,有信号量、管道、消息队列、共享内存还可以通过网络socket来实现通信。多个线程间通信为了数据的一致性需要加锁处理。

5)一个线程死掉,可能拥有这个线程的进程都会死掉,但一个进程死掉保护模式下不会对其他的进程产生影响(进程有自己独立的地址空间,而线程没有)。所以多进程的程序会比多线程的程序健壮些,但是一些要求同时进行(并发性,线程的最大特点)又要求共享一些变量的操作,只能用多线程。

从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作。Richard Stevens大师这样说过:

fork is expensive. Memory is copied from the parent to the child, all descriptors are duplicated in the child, and so on. Current implementations use a technique called copy-on-write, which avoids a copy of the parent's data space to the child until the child needs its own copy. But, regardless of this optimization, fork is expensive.

IPC is required to pass information between the parent and child after the fork. Passing information from the parent to the child before the fork is easy, since the child starts with a copy of the parent's data space and with a copy of all the parent's descriptors. But, returning information from the child to the parent takes more work.

Threads help with both problems. Threads are sometimes called lightweight processes since a thread is "lighter weight" than a process. That is, thread creation can be 10–100 times faster than process creation.

All threads within a process share the same global memory. This makes the sharing of information easy between the threads, but along with this simplicity comes the problem of synchronization.

PS:不和多进程比多线程还有两个优:

一、可以提高应用程序的响应速度,例如在android 开发中的下载这样耗时比较长的操作通常会启动一个线程来下载(idea)。

二、可以使得多CPU更见有效,一个又长又复杂的进程可以分成多个独立的线程充分利用cpu 。

进程线程是操作系统中的两个重要概念。 进程是指一个程序在执行过程中分配到的内存空间系统资源的总,是资源分配的基本单位。每个进程都有自己独立的内存空间系统资源,进程之间不能直接共享资源,只能通过进程间通信(IPC)来实现。 线程进程中的一个执行单元,一个进程可以包含多个线程,它们共享进程的内存空间系统资源。线程之间的通信共享变量比进程之间更加方便快捷。 区别: 1.资源分配:进程是资源分配的基本单位,而线程是CPU调度的基本单位。 2.独立性:进程之间是相互独立的,每个进程都有自己独立的内存空间系统资源,而线程是在进程内部创建的,它们共享进程的内存空间系统资源。 3.通信方式:进程之间通信需要用到进程间通信(IPC),如管道、消息队列、共享内存等,而线程之间通信共享变量更加方便快捷。 联系: 1.进程是由操作系统管理调度的,线程是在进程内部创建管理的。 2.一个进程可以包含多个线程线程之间共享进程的内存空间系统资源。 3.进程线程都可以并发执行,提高系统的资源利用率响应速度。 总的来说,进程线程是相互依存、相互影响的关系,它们的区别在于资源分配独立性,联系在于操作系统的管理调度。在实际应用中,需要根据具体的情况选择进程线程来实现任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值