进程和线程的重要知识点

首先,我们介绍一下进程和线程的基本概念

进程是资源( CPU 、内存等)分配的基本单位,线程是 CPU 调度和分配的基本单位(程序执行
的最小单位)。
1 )当我们运行一个程序的时候,系统就会创建一个 进程 ,并分配地址空间和其他资源,最后
把进程加入就绪队列直到分配到 CPU 时间就可以正式运行了。
2 线程 是进程的一个执行流,有一个初学者可能误解的概念,进程就像一个容器一样,包括
程序运行的程序段、数据段等信息,但是进程其实是 不能用来运行代码 的,真正运行代码的是进程里的
线程。
3 )那么,来看看我们最熟悉的 main ()函数,我们既可以认为这是一个进程,也可以认为是
一个线程。我们都知道,在 C/C++ main 函数是程序入口,所以准确来说 main 函数是程序的 主线程 。然
而很神奇的地方在于,当系统在执行 main 函数的时候, main 函数又是一个独立的进程,我们可以在
main 函数里创建子进程,也可以创建子线程。
4 )在 main 函数里创建的多个子线程中,每个线程有自己的 堆栈 局部变量 ,但多个线程也可
共享同个进程下的所有共享资源,因此我们经常可以创建多个线程实现并发操作,实现更加复杂的功
能。
多进程和多线程的比较
1 )多进程更健壮,一个进程死了不影响其他进程,子进程死了也不会影响到主进程,毕竟系统会给每个
进程分配独立的系统资源。多线程比较脆弱,一个线程崩溃很可能影响到整个程序,因为多个线程是在
一个进程里一起合作干活的。
2 ) 进程性能大于线程,每个进程独立地址空间和资源,而多个线程是一起共享了同个进程里的空间和
资源,结果就很明显了,线程的性能上限一定比不上进程。
3 ) 正因为进程性能大于线程。所以这也引发了另一重要知识点,创建多进程的系统花销远大于创建多
线程。
4 )多进程通讯因为需要跨越进程边界,不适合大量数据的传送,更适合小数据或者密集数据的传送。而
多线程无需跨越进程边界,适合各线程间大量数据的传送,甚至还有很重要的一点,多线程可以共享同
一进程里的共享内存和变量哦。
5 ) 多进程逻辑控制比多线程复杂,需要与主进程做好交互。根据上面几点,我们不难知道多进程是 "
用来做大事 " 的,而多线程是 " 各自做件小事,合作完成大事 " 。所以要做大事自然就需要更复杂的逻辑控
制,不像做小事那么目标明显。
6 )虽然多线程逻辑控制比较简单,但是却需要复杂的线程同步和加锁控制等机制。
7 )最后的一点,可能比较少见,我们可以通过增加 CPU 的数量来增加进程的数量,但增加不了线程的数
量,即增加 CPU 无法提高线程数量,线程数量由进程的空间资源和线程本身栈大小确定

 

什么时候用线程,什么时候用进程
1 )创建和销毁较频繁使用线程,因为创建进程花销大嘛。
2 )需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。
3 )并行操作使用线程。线程是为了实现并行操作的一个手段,也就是刚才说的需要多个并行操作 " 合作
完成大事 " ,当然是使用线程啦。
4 )最后可以总结为:安全稳定选进程;快速频繁选线程;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值