• 线程、进程的区别、优缺点


    进程的特点:每一个进程都有自己的独立的一块内存空间、一组资源系统。其内部数据和状态都是完全独立的。进程是操作系统进行资源分配的基本单位;

    线程是操作系统进行调度的基本单位。 同一进程下的线程不仅共享进程资源和内存,每个线程还可有一个属于它自己的内存空间——线程栈。

    以下4行是我能理解的范围

    多线程的优点:线程间切换快,共享数据,多核cpu利用率

    多线程的缺点:多线程同步、加锁控制较负责;

    多进程的优点:独立

    多进程的缺点:调度开销大

    ====结==束=============结==束============结==束===============================================

    可以参考的:

    多线程的优点:

    • 无需跨进程边界;
    • 程序逻辑和控制方式简单;
    • 所有线程可以直接共享内存和变量等;
    • 线程方式消耗的总资源比进程方式好;

    多线程缺点:

    • 每个线程与主程序共用地址空间,受限于2GB地址空间;
    • 线程之间的同步和加锁控制比较麻烦;
    • 一个线程的崩溃可能影响到整个程序的稳定性;
    • 到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
    • 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

    多进程优点:

    • 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

    • 通过增加CPU,就可以容易扩充性能;

    • 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

    • 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

    多进程缺点:

    • 逻辑控制复杂,需要和主程序交互;
    • 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
    • 多进程调度开销比较大;

    如果多个线程要同时访问某个资源,怎么处理(java)?

          多线程的性能一定就由于单线程呢?

    不一定,要看具体的任务以及计算机的配置。比如说:对于单核CPU,如果是CPU密集型任务,如解压文件,多线程的性能反而不如单线程性能,因为解压文件需要一直占用CPU资源,如果采用多线程,线程切换导致的开销反而会让性能下降;但对于比如交互类型的任务,肯定是需要使用多线程的。

    对于多核CPU,对于解压文件来说,多线程肯定优于单线程,因为多个线程能够更加充分利用每个核的资源。

    进程的优点是提高CPU运行效率,在同一时间内执行多个程序,即并发执行。但是从严格上讲,也不是绝对的同一时刻执行多个程序,只不过CPU在执行时通过时间片等调度算法不同进程高速切换。每个子进程都只有一个父进程。

    1、操作系统在执行一个程序时,会自动建立一个‘进程’,这个进程中,至少包含一个线程(这个线程被称为主线程),来作为程序入口。

    2、操作系统运行中,会产生很多个‘进程’,这些进程不共享内存;而每个进程占有的内存,却可以被这个进程中不同的‘线程’所共享;另外,这些线程不仅共享这段内存,每个线程还可有一个属于它自己的内存空间——线程栈,这是线程建立时,操作系统分配的,用来保存线程数据。

    3、线程总是属于某个进程,进程中的多个线程共享进程的内存。

    4、进程被分为多个线程后,这些线程可以并发执行。

    线程的概念:一个线程是进程的一个顺序执行流。

    同类的多个线程共享一块内存空间和一组系统资源,线程本身的数据通常只有CPU的寄存器数据,以及一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。

    参考资料

    http://blog.csdn.net/aaronin/article/details/7700794

  • 相关阅读:
    第01组 Alpha冲刺 总结
    第01组 Alpha冲刺 (6/6)
    小黄衫买家秀及获奖感言
    软工实践个人总结
    实验 7:OpenDaylight 实验——Python 中的 REST API 调用
    实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
    实验 5:OpenFlow 协议分析和 OpenDaylight 安装
    SDN实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    实验 3:Mininet 实验——测量路径的损耗率
    2020软件工程个人编程作业一:统计分析GitHub 的用户行为数据
  • 原文地址:https://www.cnblogs.com/stay-sober/p/4173712.html
Copyright © 2020-2023  润新知