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

序言

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

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

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

进程是什么?

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

打开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会在出错的单词下面划出红线。那么实际上每启动一个World操作系统就是创建了一个进程,而

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

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

为什么要使用多线程?

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

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

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

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

优势:

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

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

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

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

总结:

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

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/chaojizhengui/p/javaThread.html