• 线程与进程区别


    一.定义:

    进程(process)是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元。

    进程中所包含的一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。

    二.区别:

    一个程序至少有一个进程,一个进程至少有一个线程.。

    1.多进程比多线程程序要健壮进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程没有自己单独的内存地址空间。一个线程死掉整个进程就死掉了。

    2.进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大;

       线程一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进 程快,效率高但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

    3.进程——资源分配的最小单位,线程——程序执行的最小单位。或者说是CPU调度和分派的基本单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。

    4.体现在通信机制上面:正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。一进程下的线程共享数据(比如全局变量,静态变量),通过这些数据来通信不仅快捷而且方便,当然如何处理好这些访问的同步与互斥正是编写多线程程序的难点

    5.体现在CPU系统上面:线程使得CPU系统更加有效,因为操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。

       进程占用内存多,切换复杂,CPU利用率低; 线程占用内存少,切换简单,CPU利用率高。

    6.线程的执行与进程是有区别的。每个独立的线程有有自己的一个程序入口,顺序执行序列和程序的出口,但是线程不能独立执行,必须依附与程序之中,      由应用程序提供多个线程的并发控制。

    三.进程、用户线程、内核线程的区别和联系

      进程 用户线程(轻量级进程) 内核线程
    代码段
    数据段
    描述符task_struct
    用户空间堆栈 一个线程组共享一个用户空间 完全没有
    内核空间堆栈
    PID 独一无二的 一组线程共享一个

    这里的有是指拥有独立的。

    四.进程与线程的选择

    取决以下几点:

    1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。

    2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应

    3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;

    4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;

    5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

    6.对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  • 相关阅读:
    【转】ios输入框被键盘挡住的解决办法
    【转】操作系统Unix、Windows、Mac OS、Linux的故事
    mac 下删除非空文件夹
    解决Win7 64bit + VS2013 使用opencv时出现提“应用程序无法正常启动(0xc000007b)”错误
    图的邻接表表示
    图的邻接矩阵表示
    并查集
    05-树9 Huffman Codes及基本操作
    05-树7 堆中的路径
    堆的操作集
  • 原文地址:https://www.cnblogs.com/curo0119/p/7857322.html
Copyright © 2020-2023  润新知