zoukankan      html  css  js  c++  java
  • Java并发专栏(一)—— Process vs Thread

    一.前言

    程序是代码和数据的集合,是一种静态实体。不具有代码执行和数据处理的能力,更多是一种行为的描述。

    如果将程序和处理器结合,处理器将程序加载至内存,然后执行程序代码处理数据。这时就是可执行的程序。对于可执行的程序,如何描述?

    二.进程

    定义

    进程是程序运行的实例,简单的说,是一个运行的程序。它是计算机操作系统资源分配的最小单位。

    表现形式

    一般一个程序运行起来,操作系统都会为期创建一个或者多个进程。比如一个java应用启动后,对应一个java的进程。如:

    PID    COMMAND      %CPU  TIME     #TH   #WQ  #PORTS MEM    PURG   CMPRS  PGRP  PPID  STATE
    62600  java         0.0   00:00.28 19    2    75     16M    0B     0B     57916 57916 sleeping
    

    资源分配

    操作系统创建每个进程时,都为其分配运行时的系统资源:

    • 处理器
    • 内存
    • 文件句柄

    等等....

    进程状态转换

    进程的状态有:new,ready,running,waiting,teminated。这些状态随着操作系统的调度和进程的运行情况会发送切换:

    进程创建管理

    一个进程可以创建一个或者多个其他子的进程,每个子进程都分配独立的资源,父子进程之间资源的隔离导致其必须通过系统调用才能会话。

    操作系统为每个进程维护维护一份数据结构,该数据结构包含了进程的所有信息,叫做PCB(全称Process Control Block),包含进程以下信息:

    • 进程识别号;
    • 进程状态;
    • 程序计数器;
    • cpu调度信息;
    • 内存管理信息;
    • I/O状态信息;

    .....等等

    三.线程

    定义

    线程是在进程内的执行实体。上面提到应用程序启动时,会为其创建进程并为其分配相应的系统资源,单同时创建一系列的线程,运行程序代码处理数据。它是计算机操作系统可调度执行的最小单元。

    表现

    一个进程中创建了多个线程,分别执行程序处理数据。

    1.一个进程

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                
    20557 jetty     20   0 2858m 734m 7468 S  0.3 39.1 357:36.03 java  
    

    2.多个线程

      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                
    20583 jetty     20   0 2858m 734m 7468 S 99.9 39.1   0:13.88 java                                                                       
    20559 jetty     20   0 2858m 734m 7468 S  0.0 39.1   0:18.40 java                                    
    20563 jetty     20   0 2858m 734m 7468 S  0.0 39.1   0:05.00 java                                    
    20564 jetty     20   0 2858m 734m 7468 S  0.0 39.1   1:11.42 java                                    
    20565 jetty     20   0 2858m 734m 7468 S  0.0 39.1   0:00.25 java 
    

    关系

    • 一般进程创建后会伴随启动一个主线程,主线程中再可以创建额外的子线程;
    • 线程都是在进程内,共享进程被分配的资源;
    • 在一个进程中的多线程思想和多任务多程序非常类似;

    为什么要有多线程

    从以上的进程和线程的描述中可以看出:

    1. 创建进程需要进行大量资源的初始化、分配,非常消耗性能;
    2. 因为每个进程都拥有自己的隔离资源,所以进程会话需要进行系统调用,进程之间的交互代价高昂;

    采用多线程的优势:

    1. 线程共享进程的资源,减少创建进程时带来的资源分配;
    2. 线程间可以通过共享资源进行会话;
    3. 在多核cpu时,可以进行并行处理;
    4. 线程之间隔离,不影响进程;
    参考

    Processes and Threads
    Processes and Threads
    Processes and Threads

    附件

    Processes and Threads.pdf

  • 相关阅读:
    prometheus,alertmanager 报警配置详解
    使用 kubeadm 搭建 kubernetes1.10 集群
    kibana-sentinl-监控报警
    ELK集群模式部署
    mongo 误操作恢复数据
    mongo 实时同步工具 mongosync
    移动端巨坑——iphone6Plus默认设置不使用sessionStorage
    iphone6 Plus seesionStorage失效
    移动端手势拖拽排序神器Sortable.js
    vue使用swiper(转)
  • 原文地址:https://www.cnblogs.com/lxyit/p/9468113.html
Copyright © 2011-2022 走看看