• 进程、线程、多线程概念详解


    序言

      最近觉得自己对线程一块的理解非常混沌,于是回头将线程的知识从头开始梳理。

      当前进的路上遇到瓶颈时,停下来整理回顾自己过去所做的,所学的,或许能够让你豁然开朗。

      下面讨论的都是基于单核处理器。

    进程是什么?

      进程是程序运行实例,是程序向操作系统申请资源(例如内存空间)的基本单位。

    打开Windows操作系统的任务管理器,点击进程菜单可以看到目前系统存在的所有进程。

    例如一个正在运行的word文档就是一个进程。正常进程的一生会经历从代码加载,代码执行

    到代码执行完毕的一个完整过程。这个过程也是进程本身从产生,执行到最终消亡的过程。

    如果还是觉得不好理解的话举一个和Java有关的例子——控制台打印HelloWord:

    public class HelloWorld {
        public static void main(String[] args) {
            
            System.out.println("Hello world.");
            
        }
    }

    当运行(点击Run As Java Application)这段代码的时候,就会产生一个进程,先加载编译代码,

    然后执行任务打印Hello world,执行完成之后消亡。

      操作系统中可以有很多的进程,但是同一时刻,只有一个进程运行。并且进程产生之后并不一定

    能够立刻执行,运行需要分配到处理器资源(这一块是进程调度有关的概念,不清楚可以去大概了解一下)。

    线程是什么?

      线程是进程中最小的可执行单位。线程是在进程的基础上进行的进一步划分,一个进程可以只有一个线程,

    也可以包含多个线程。例如在使用Word的时候,假设打字是一个线程,线程的任务就是打字,如果出现了拼写

    错误,则Word会在出错的单词下面划出红线。那么实际上每启动一个Word应用,操作系统就是创建了一个进程,而

    这个进程又有许多其他的程序在运行(例如拼写检查),这些程序就是一个个线程。如果Word关闭了,则这些

    拼写检查的线程就会消失。反之,拼写检查消失,并不一定会然Word进程消失。

    为什么要使用多线程?

      还是Word的打字的例子,平时使用Word,在出现拼写错误的时候,几乎同时拼写错误提示就显示出来。

    因为打字是当前Word进程的一个线程,拼写检查也是。并且当我们在打字的时候,拼写检查也在“同时”运行,

    这样的优点就在于可以很快的知道出现了拼写错误,及时处理。倘若在文档都已经写好,再进行拼写检查,

    对于用户来说会是非常糟糕的使用体验。这就时多线程的优势之一——提高系统的响应性。 

    优势:

    1.提高系统的吞吐量。举例:一个网站可以接受并处理多个请求。
    2.提高系统的响应性。举例:在下载文件的同时可以去做其他操作,而不会出现一定要下载完成才可以去做的情况。
    3.最小化系统资源使用。多个线程可以共享进程的资源。

    多个线程真的是同时运行吗?

      答案是否定的——不是。在进程得到系统分配的处理器资源之后,进程中的调度程序选择哪一个程序来运行,

    进程中同一时刻只能有一个线程运行。只是系统处理的速度非常的快,在视觉上感觉是同时运行的。

    总结:

      技术学习基础最重要,理解概念,是能否掌握多线程编程的关键。

    本想对进程调度和线程调度进行一个说明,但是对这部分内容只是一知半解。

    这个时候就会非常希望自己在大学的时候有好好学《计算机操作系统》这门课。

    在计算机专业,进程调度和线程调度算是基础了。

      造化弄人,偷过的懒,全都要还。共勉。

  • 相关阅读:
    一起谈.NET技术,.NET 4九大新特性 狼人:
    一起谈.NET技术,重新认识C#: 玩转指针 狼人:
    一起谈.NET技术,.NET 3.x新特性之自动属性及集合初始化 狼人:
    一起谈.NET技术,从WPF想开去 狼人:
    [置顶] 第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器
    [置顶] 第十七章——配置SQLServer(3)——配置“对即时负载的优化”
    JDBC for rdf3x
    表达式判断 帅呆了的题目
    《数学之美》读书感想
    [置顶] 第十七章——配置SQLServer(4)——优化SQLServer实例的配置
  • 原文地址:https://www.cnblogs.com/chaojizhengui/p/javaThread.html
Copyright © 2020-2023  润新知