linux 进程 线程

进程

  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地址空间和相关资源,总体能够达到的性能上限非常大。
多进程缺点
  • 逻辑控制复杂,需要和主程序交互;
  • 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算;
  • 多进程调度开销比较大;

内核线程和用户线程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,615评论 0 23
  • 操作系统概论 操作系统的概念 操作系统是指控制和管理计算机的软硬件资源,并合理的组织调度计算机的工作和资源的分配,...
    野狗子嗷嗷嗷阅读 14,174评论 3 34
  • 学生习作(王愉景) 秋天到了,小猴妈妈让小猴去果园摘一筐苹果,拿到市场上卖。小猴心想:如果我拿苹果去市场上卖就能收...
    zhihq阅读 4,099评论 0 0
  • 有的人一生下来就背负了父母的期望,连去尝试梦想的机会都没有,但是没有关系的,身不能至,心之所至。 她生长斯,长于斯...
    止于至善_e28c阅读 1,306评论 0 1
  • 今天早晨5:00起床了,为宝贝做南瓜馒头吃(昨晚发的面)起来一看,都开满盆了,可能昨晚发面发早了,幸...
    孙若菡妈妈阅读 1,053评论 0 0