美文网首页
linux 进程 线程

linux 进程 线程

作者: MagicDong | 来源:发表于2018-04-04 11:48 被阅读0次

    进程

    1. 进程是表示==资源分配==的基本单位,进程有利于资源的管理和保护
    • 优点: 拥有独立的运行空间
    • 缺点:系统开销大,在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销.

    线程

    1. 线程是进程中执行运算的最小单位,亦即执行处理机==调度==的基本单位
    2. 线程机制支持并发程序设计技术,在多处理器上能真正保证并行处理。而在linux实现线程很特别,linux把所有的线程都当作进程实现。linux下线程看起来就像普通进程(只是该进程和其他进程共享资源,如地址空间)
    3. Linux下不管是多线程编程还是多进程编程,最终都是用do_fork实现的多进程编程

    线程的好处:

    1. 易于调度
    2. 提高并发性。通过线程可方便有效地实现并发性,进程可创建多个线程来执行同一个程序的不同部分。
    3. 开销少,在进程内创建、终止线程比创建、终止进程要快。同一进程内的线程间切换比进程间的切换要快,尤其是==用户级线程间==的切换。线程之间相互通信无须通过内核(同一进程内的线程共享内存和文件)
    4. 充分发挥多处理器的功能,通过多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使得每个处理器得到充分运行

    进程与线程的关系

    • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
    • 独立性方面:进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在
    • 资源共享方面:进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源
    • 资源分配给进程,统一进程的所有线程共享该进程的所有资源;
    • 线程在执行过程中,需要协作同步,==不同进程的线程==间要利用消息通信的办法实现同步;
    • 处理机分给线程,即真正在处理机上运行的是线程。
    • 一个说法:
      UNIX/linux环境,采用多线程没必要
      ==占用资源角度==:产生一个多进程时肯定是需要产生的一点内存用来复制进程表项,即一个task_struct结构,但这个结构本身做得相当小巧;对于多进程来说,代码段是肯定不用复制的,因为父进程和各子进程的代码段是相同的;数据段和堆栈段,通过copy-on-write,即写时拷贝技术,当子进程或父进程要改变变量x的值时就会复制该变量。

    多线程优点
    • 无需跨进程边界;
    • 程序逻辑和控制方式简单;
    • 所有线程可以直接共享内存和变量等;
    • 线程方式消耗的总资源比进程方式好;
    多线程缺点
    • 每个线程与主程序共用地址空间,受限于2GB地址空间;
    • 线程之间的同步和加锁控制比较麻烦;
    • 一个线程的崩溃可能影响到整个程序的稳定性;
    • 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

    多进程优点
    • 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
    • 通过增加CPU,就可以容易扩充性能;
    • 可以==尽量减少线程加锁/解锁==的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
    • 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。
    多进程缺点
    • 逻辑控制复杂,需要和主程序交互;
    • 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算;
    • 多进程调度开销比较大;

    内核线程和用户线程

    相关文章

      网友评论

          本文标题:linux 进程 线程

          本文链接:https://www.haomeiwen.com/subject/vsdkhftx.html