多线程的概念

点击链接返回标题->


什么是进程?

进程 (Process),是程序的基本执行实体

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;

在当代面向线程设计的计算机结构中,进程是线程的容器。

程序是指令、数据及其组织形式的描述,进程是程序的实体。

我们通过快捷键->CTRL + SHIFT + ESC<-可以打开任务管理器,如下图。

在这里,可以看到正在运行的进程,

可以简单的理解为,一个软件(.exe执行程序)运行起来,就是一个进程。


什么是(多)线程?

线程 (Thread),是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

我们经常使用微信,微信本质是一个可执行程序,可以视作进程;

在微信中,有"聊天","通讯录","朋友圈","视频号"等等功能,可以视作线程

可以简单的理解为,软件中可以相互独立、同时运行的功能,就是线程。

特别的,如果线程不止一个,我们就称之为多线程 (扣题)


多线程有什么用?

我举一个栗子------

阿晴是一个海王(反正不是我),作为一个合格的海王,必须经营好自己的鱼塘,对于每一条鱼都要"照顾周到",每条鱼找阿晴聊天时,阿晴最多10分钟之内必须要做出回复,不然小鱼鱼就会伤心难过离你而去,从而痛失海王之称。

在上面这个例子中,海王阿晴其实是cpu 的类比,鱼塘是指进程 ,而小鱼鱼们就是一个个线程

如果阿晴是纯爱战士(这个可以是我) ,只关心一条唯一的心上鱼,每10分钟回复一次消息,那我想应该是随便都能"应对"过来的,可见单线程是很轻松的。

但其实阿晴也可以在这10分钟内依次回复小鱼鱼们,反正回复完一条鱼之后10分钟内不用再管,怎么也来得及,充分把这10分钟给利用起来,经营好一片鱼塘,所以多线程主要看cpu的性能。

在代码中------

System.out.println("第一次回消息");//0.04s

System.out.println("第二次回消息");//0.02s

System.out.println("第三次回消息");//0.02s

System.out.println("第四次回消息");//0.03s

System.out.println("第五次回消息");//0.15s

for(int i = 1; i <= 5; i++){

System.out.println("第二次回消息");

}

上面我写了两段伪代码, 可以看作两个不同线程。

即便你的cpu很强大可以一次性全部执行,但在单线程程序中,这五行代码一定是一行一行执行的,cpu不会切换到其它代码中执行。

如果是多线程,cpu就可以充分利用 某行执行时间较长代码的等待时间 ,去执行其它线程的代码,从来提高进程的整体运行效率。比如在第一块中花了0.04s去执行第一行,在这个同时就可以去执行第二块中的第一次循环,而不是等到第一块的五行完全执行完毕,才开始进入第二块!


并发和并行

并发:在同一时刻,有多个指令在单个cpu上交替执行。

并行 :在同一时刻,有多个指令在多个cpu上同时执行。(通常电脑是只有一颗cpu的,这里所指的"多个cpu"指的是cpu的核心数量,比如2核4线程4核8线程8核16线程16核32线程32核64线程,也就是cpu的性能,决定了同一时间能处理多少线程。)

/*

上面两个概念都是指"海王行为",同时应付多条小鱼鱼。区别在于,根据cpu的性能(有几核几线程)决定同一时间执行的线程数(可以理解为海王也有高低之分)。

*/


总结

1.什么是多线程?

有了多线程,我们就可以让程序同时做多件事情
2.多线程的作用?

提高进程的整体运行效率
3.多线程的应用场景?

只要你想让多个事情同时运行就需要用到多线程,比如:软件中的耗时操作、所有的聊天软件、所有的服务器。


下一篇将介绍多进程的实现方式,敬请期待。

相关推荐
在路上`8 分钟前
前端学习之后端java小白(二)-sql约束/建表
java·sql·学习
我真的是大笨蛋12 分钟前
JVM 四大晋升机制
java·jvm
木心爱编程19 分钟前
C++20多线程新特性:更安全高效的并发编程
java·jvm·c++20
ljf883819 分钟前
Java导出复杂excel,自定义excel导出
java·开发语言·excel
江流月照28 分钟前
PCIE地址空间介绍
java·服务器·网络
一只乔哇噻1 小时前
java后端工程师进修ing(研一版‖day44)
java·开发语言·学习·算法
老华带你飞1 小时前
畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·畅阅读系统小程序
卓码软件测评4 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
Lionel_SSL7 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛8 小时前
手搓Springboot
java·spring boot·spring