进程与线程

2020-05-25  本文已影响0人  撸码小狂魔

Java编程属于一种多线程的运行机制,这种多线程的编程机制在早起出现的时候绝对是一个编程语言的亮点所在,但是随着后续技术的不断发展,多协程(纤程)技术又成为了今天的主流,只不过从Java本身来讲,还不支持多协程的开发(Python、Kotlin)。

如果要想明确的理解多线程的编程概念的话,首先要清楚什么叫做多进程的编程,在传统的操作系统之中,一个程序任务的完整执行,就叫进程。但是需要注意的是,早期的操作系统经历了单进程与多进程的发展阶段,所谓的单进程指的就是当前的操作系统里面只允许允许一个程序。

早期的操作系统属于单进程应用,那么就意味着同一个时间段内只允许有一个程序执行,这个程序会占用当前系统之中的全部资源(CPU、IO、内存、显卡、声卡、...)

后来到了WIndows系统的时代(Windows最为重要的版本“Windoes95”),即便电脑上有病毒那么也可以去使用操作系统运行各类程序,因为Windows系统就属于多进程的操作系统,意味着同一时间段内会有多个程序并行执行。但是早期的CPU只有一块,那么这一块的CPU是如何进行分配的呢?为了解决这种多进程的资源占用的问题,所以操作系统之中就设计了一个“时间片轮转”算法,利用这种算法,让一块CPU可以同时为多个进程服务,就相当于每一个进程轮流抢占CPU资源,这个在同一个时间段内就会有多个进程并行执行,然而在一个时间点上,只会有一个进程在执行。

Java本身不支持多进程的程序开发,但是Java支持多线程的程序开发,那么就需要清楚的区分出进程和线程有哪些联系呢?

所谓多线程指的就是在一个进程的基础之上的划分。

讨论: 为什么需要多线程的划分呢?
大家可以试想一下,假如现在要盖一栋房子,但是现在只有一个工人(挖地基、运货、水泥工、电工、搬运、设计)进行房屋的搭建,那么这个事件会非常的漫长。
所以为了提高单位时间内的工作效率,那么最好的做法是多人协作进行房屋的搭建,这样可以极大的节约时间。

所谓的并发编程就是充分的发挥出操作系统和硬件的性能水平,让整个的进程执行的速度更快。

所有的程序在操作系统的内部都是以进程的形式包装的,但是不同的进程之间是不允许直接进行互相访问的,如果非要进行访问,则必须利用管道流的形式完成,但是如果是在一个进程之内创建的若干线程,那么这些线程可以贡献当前进程之中所有数据信息。


截屏2020-05-25 下午1.04.40.png

即便采用了多线程的编程模型,实际上所有的程序依然是以进程的单位在操作系统上存在的,一旦进程消失了,与之匹配的线程一定会消失。线程突然消失了,那么进程不一定会消失。

现在的程序的设计开发,有一个最为核心的任务:尽可能充分的发挥出所有主机的硬件性能水平(由于硬件的技术发展的比较快,所以当前的环境下,很多的软件还不能匹配硬件的性能,所以就产生了所谓的“性能过深”)。

在传统的操作系统中,基本上只有一块CPU,所以多个进程之间可以依据时间轮转算法来获取CPU资源。多个要执行的进程在进程队列之中进行保存,每当CPU空闲之后(每一个进程抢占到CPU之后会运行一段时间,但是一段时间之后自动进行资源让出),则会通过进程队列获取一个要执行的进程继续占用资源并且继续执行进程的操作。

但是现在的技术的发展已经到了多核CPU的时代了,所谓的多核CPU指的就是在一块CPU之内利用一些虚拟技术,让其可以实现多个CPU并行的运行机制(主要取决于制造工艺),这个时候再去讨论多线程的概念,实际上就会有多个CPU共同参与执行。此时就必须清楚什么叫做CPU数量以及什么叫做内核数量。

不同的操作系统内部都有一些命令来获取CPU的信息,在Windows系统里面可以在命令窗口里输入 “wmic” 进入Windows命令控制台。

1、得到当前系统之中的到CPU的名字:“cpu get Name”

2、的到当前CPU的内核数量:“cpu get NumberOfCores”

3、查看逻辑线程数量:"cpu get NumberOfLogicalProcessors"

上一篇下一篇

猜你喜欢

热点阅读