zoukankan      html  css  js  c++  java
  • 线程概念

    
    

    什么是线程:

     大白话;进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程

    前提:

      1 我们有了进程概念后,不同程序之间完成切换,我们可以浏览网页 听歌等其他操作,

           2 但是现在有另外一个问题出来,我们需要开发一个文本编辑器,我们需要输入内容输入到文本编辑器(这是一个任务),还需要把文本编辑的内容保存到磁盘(这又是一个任务),同时还需要输出到屏幕(这又是一个任务)

      3 这里面这个程序做了三件事 内容到编辑   保存到磁盘   输出到磁盘,这三件事是应该放到一个进程 还是 三个进程?? 

               如果是一个进程,程序变成什么样了? 

                      第一件事是输入内容;这时候我什么都看不到(内容有没出错,完全不知道),

                      第二件事是显示;这时候我才看到内容

                      最后第三件事是保存,这时候无法输入内容,和显示  三件事都是按顺序执行

              如果是三个进程,程序会变成什么样了?

         一个进程接收用户输入内容,一个进程用来显示内容,一个进程用来保存内容,三个进程一直切换,给用户的感觉是在同时在走,但是从效率上来存在问题,进程的切换是非常耗资源的,进程之间都有自己的独立的内存空间,其他进程是无法获取的.如果按上面操作,实现三个进程,这时候输入的内容进程,需要把数据给到屏幕显示的进程,屏幕显示的进程,再把数据给到存入磁盘的进程,这涉及到进程之间的通信(实际上,进程之间的通信是非常麻烦的),另外在进程切换的时候,有涉及到了不同进程之间的状态保存,挂的时间消耗很大,三个进程相互切换的时候,就需要挂起一个进程,这样会存在多次挂起来,恢复操作.这个时间非常长(这个程序假如跑一秒钟就完事了),一次切换时间微不足道,但是切换的次数如果太多,带来的损耗就非常致命了这时候就出现了线程(可以理解为微进程,就是进程里面又开进程,特点;共享进程所有的资源)

     线程是进程里面更小的颗粒,如果线程需要挂起来或者保存起来,要比进程消耗小的多,另外线程由于共享进程所有的数据,这时候多个线程不存在通信的障碍了.

    进程 和 线程区别

    1 一个程序至少有一个进程,一个进程至少有一个线程.(进程可以理解成线程的容器)
    
    2 进程在执行过程中拥有独立的内存单元,而多个线程共享内存(进程的内存),从而极大地提高了程序的运行效率。
    
    3 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和
      程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 
    
    4 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调
      度的一个独立单位. 
      线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程
    自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)但是
    它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

    线程: 最小的执行单元

    进程: 最小的资源单位

      

  • 相关阅读:
    3、总结
    三分及小例题
    约瑟夫问题的推导
    对于联通块的处理
    扩展欧几里得与二元不定方程
    js 阻止事件捕获
    原生xhr发送JSON
    $timeout
    Angularjs Ng_repeat中实现复选框选中并显示不同的样式
    为什么用Object.prototype.toString.call(obj)检测对象类型?
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9105268.html
Copyright © 2011-2022 走看看