zoukankan      html  css  js  c++  java
  • 线程与进程,多线程,多进程,线程并发,线程并行

    一、线程、进程概念:

         进程:是程序的一次运行活动,是系统资源分配和调度的一个独立单位,有独立的地址空间和系统资源。

         线程:“轻量级进程”,是进程的一个实体,是CPU调度的基本单位。多个线程共享同一个进程的资源。

    二、引入线程的好处

    (1)线程占用资源要比进程少的多
    (2)创建一个新的线程花费的代价小
    (3)切换线程方便
    (4)提高并发性

    三、多线程

      多线程举例:比如用浏览器,同时进行浏览网页、播放视频、下载资源、听音乐等操作

    多线程缺点: 
    1. 多线程比多进程成本低,不过性能也更低
    2. 一个线程的崩溃可能影响到整个程序的稳定
    3. 线程多了之后,线程本身的调度也麻烦,需要消耗较多的CPU
    4. 无法直接获取系统的资源,总体能够达到的性能上限有限制
    5. 线程之间的同步和加锁控制比较麻烦

    四、 多进程

      多进程举例:比如同时运行QQ、微信、截图工具、视频播放器等

    多进程优点:
    1. 每个进程互相独立,子进程崩溃不影响主程序的稳定性
    2. 通过增加CPU,就可以容易扩充性能
    3. 进程能直接获取系统的资源,总体能够达到的性能上限非常大

    五、同一进程的线程共享哪些资源?

         a. 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
         b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
         c. 局部静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
         d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。

    六、线程独享的资源?

         a. 栈 栈是独享的
         b. 寄存器 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC
         c. 线程ID

    七、并发

         并发是把CPU运行时间划分成若干个时间段,每个时间段再分配给各个线程执行,当一个线程在运行时,其它线程处于挂起状。从宏观角度是同时进行的,但从微观角度并不是同时进行。
         CPU根据线程调度算法来切换线程。当正在执行的一个线程需要进行IO操作或者需要访问内存的时候,CPU完全可以放弃该线程,转而调度线程就绪队列上的其他线程,被放弃的线程则进入阻塞状态,IO操作或者访问内存操作结束之后,该线程可以进入线程就绪队列上。
         典型的线程调度算法:(1) FIFO算法。在非抢占式系统中,所有的线程构成一个先进先出队列,最先进入队列的线程获得CPU,等到放弃处CPU时,又回到队列尾部,下一个线程继续执行。若有新的线程进来,则添加到队列尾部。(2) 时间片轮转调度算法。(3) 优先级调度算法。


    八、并行

    并行是同一时刻当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,是真正意义上的不同线程在同一时刻同时执行。

        
  • 相关阅读:
    [转]SDRAM/DDR/DDR2/DDR3/DDR4
    Altera cyclone系列altlvds调试
    [转]关于Altera LVDS 经验分享
    [转]FPGA的GTP高速串行接口数据收发
    [转]ISE、vivado、QuartusII调用notepad++、UE汇总(整理)
    [转]vivado管脚分配:PACKAGE_PIN or LOC
    [转]如何使用WinDriver为PCIe采集卡装驱动
    【Docker系列教程之六】Docker的前世今生
    【Docker系列教程之五】如何构建Dockerfile
    【Docker系列教程之四】Dockerfile入门
  • 原文地址:https://www.cnblogs.com/kqZhu/p/6876162.html
Copyright © 2011-2022 走看看