进程 VS 线程


一、程序与进程


    程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。
    进程是一个具有独立功能的程序与某个数据结合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不止是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来标识。 
    在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。

二、线程的引入

    在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程。但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行。因此线程被引入操作系统。

实际生活中:

    当我们将onenote设置为5分钟自动保存一次,onenote一方面监听打字输入状态;另一方面还要对草稿进行保存。假设如果这个进程只有一个线程的话,当对草稿进行保存时,因为此时需要访问硬盘,访问硬盘的线程是阻塞状态,这时任何输入都没有反应,用户体验度极差。而使用多线程,每个线程仅仅需要处理自己那部分应该完成的任务,而不用关心和其他线程的冲突。例如下图


    进程很多优点,提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可提高计算机利用率,既然进程如此优秀,为什么还需要线程?进程的缺点:

(1)一个时间干一件事情

(2)执行过程中阻塞,整个进程就会挂起,无法进行

实例:

    某个服务员负责3个餐桌就餐工作,主要为为客户点菜、安排上菜、最后安排整理餐桌共3个环节。而如果只提供进程的话,服务员只能为一个餐桌服务,而现实生活中一个服务员可同时为3个餐桌服务。也就是给一个安排上菜后,可以去为另一个餐桌点菜。同时为3个餐桌提供并行服务,这样可以提高工作效率。而实际操作系统中,也同样引入了这种类似的机制——线程。


三、区别

a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

b.通信:进程间通信,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

    主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。


四、多进程与多线程



多进程

   优点:内存隔离,单个进程的异常不会导致整个应用的崩溃。方便测试,编程简单。

   缺点:进程间调用,通讯和切换均比多线程大,耗资源。

   使用场所:目标子动能交互少,如果资源和性能许可,可以设计由多个子应用程序来组合完成目的

多线程

   优点:提高系统的并行性,并且开销小。数据共享方便(不需要进程间的通信)

   缺点:没有内存隔离,单个现成的崩溃会导致整个应用程序的退出,发生采内存等bug时,定位及其不方便。编程复杂;调试困难;线程执行的随机性可能导致逻辑混乱,甚至发生死锁现象;

   使用场所:在存在大量IO,网络等耗时操作,或者需要和用户交互时,使用多线程有利于提高系统的并行性和用户界面快速响应从而提高友好性。

    多进程与多线程只是表面上了解了,还需要多去实践。

五、适用场景    

    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在多核处理机机器上运行,而进程则可以跨机器迁移。根据实际情况选择使用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值