zoukankan      html  css  js  c++  java
  • 进程和线程

    举例来说:程序员为女儿做蛋糕。

    1、程序员需要食谱,食谱上写出了需要哪些原料,如何做。食谱就是程序,原料就是数据,程序员就是CPU。程序员按照食谱、对原料进行加工,做蛋糕的过程就相当于CPU执行代码、操作数据的过程。做蛋糕的过程就是进程。

    2、做蛋糕可以分为几个小的步骤,这些步骤共同加工原料。每个小的步骤就是一个线程。比如做蛋糕进程可以分为以下几个线程:取原料(包括鸡蛋、面粉、奶油、糖、水等),混合原料,烘烤混合物。这些步骤之间存在一定的先后关系和互斥关系,比如:混合原料必须在取原料之后,二者不能同时进行。

    3、假设程序员做蛋糕的时候,淘气的儿子跑进来,对爸爸说,被蜜蜂蛰了(相当于进来一个优先级更高的进程)。这时候,程序员就会暂停做蛋糕,同时记录做到了哪一步。然后拿出急救说明书(另一段程序),急救箱(另一端程序的数据),处理儿子的蛰伤(另一个进程)。处理完毕后,程序员接着原来的步骤继续做蛋糕。

    1、进程是操作系统进行资源分配和调度的基本单位,线程是CPU调度的基本单位,是进程中一个单一顺序的执行流。

    2、把进程当成做一件事情,操作系统管理进程,负责调度进程。具体怎么做?是进程的事。一个进程至少有一个主线程,可以有多个辅助线程,真正做事的是线程。进程做的事情:可以是一个线程按顺序一步一步做,也可以启动多个线程,协作完成。

    3、进程有一块内存,也就是可执行文件装载到操作系统中,从上到下大致为:栈,堆,全局存储区,常量存储区,代码区。而线程可以认为是一个执行流,每个线程都有一个自己的调用堆栈,可以访问进程中的资源,对于共享资源需要进行同步控制。而一个进程是不能访问另一个进程的资源,只能通过进程间的通信传递数据。

    4、进程之间的切换代价大,而线程之间的切换代价小。

    5、多线程的使用场景:

      a、对于UI界面,如果执行一个耗时的操作,为了让界面及时响应,可以重启一个线程,去执行。

      b、同时有多个请求,可以创建一个线程池,来一个请求,从线程池中拿出一个空闲的线程处理。

      c、对于网络数据的接受,创建一个线程用于接受数据,接受的数据保存在本地,处理之后一个一个转发出去。

  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/java2016/p/5537983.html
Copyright © 2011-2022 走看看