Java并发(多线程)——概念篇(程序、进程、线程、并行、并发)

笔者认为,学习java多线程,并不是上来会使用Thread、Runnable..就完事了,而是要从相关概念入手,了解什么是线程以及跟线程千丝万缕的知识点。这也是我兜兜转转绕了一大圈才有感而发的,可怜没师傅的孩子~





一、程序

定义:计算机能识别和执行的指令(参考:百度百科程序、进程)。

理解:哦~指令..指令是个啥么东东?不就是我们编写的代码吗,搜嘎,这个我熟,public static void main(String[] args) ..注意了,既然是代码,那也就意味着程序是静态的,它是“死”的。





二、进程

定义:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位(参考:百度百科程序、进程)。

理解:看完官方式的解答,我还能说什么呢,我不是人,我看不懂人话行了吧..个人理解,进程是程序执行的一个过程,蓑衣,一个过程,一个活动过程,你品,你细品,它需要不停的动啊,进程是动态的

拓展:一个进程的资源包括CPU、内存空间、磁盘IO等。


三、线程

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

注意:哦,是进程的最小单位(其实是CPU调度和分派的基本单位),一定是在进程之中的。





四、并行

定义:指“并排行走”或“同时实行或实施”(参考:百度百科并行)。

理解:这里我觉得拿公路举栗比较典型,老司机们都知道,高速公路上一般有很多车道,假设一个高速收费路口有5个车道,路上有3辆车(<=5),注意通过收费路口时,一个车道只能有一辆车哈,别乱闹,那么它们可以各自占用一个车道并排通过路口,谁也不干扰谁。这也就是3辆车同时通过路口而不会产生冲突。

上面栗子中,5个车道代表物理机器的总逻辑线程数量上限是5,路上3辆车代表进程中的线程数量是3,现在进程中的线程数(3)<=机器总逻辑线程数量(5),此时并行运行。





五、并发

定义:指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行(参考:百度百科并行)。

理解:你看看,我又不是人了..继续拿“并行”的栗子来参考吧,刚才收费路口是5个车道,3辆车,能够“并行”。假设现在还是那个路口,还是那5个车道,现在有20辆车(>5),通过路口时一个车道只允许一辆车,肿么办?收费小姐姐发话了,排好队形,一个个来..ok,现在大家都在有序通过路口,但是有一辆车发生事故了,你不能让它堵在路口吧,所以先让后面的老司机来,同样的,小姐姐发现又有一辆车很慢(这个老司机可能2分钟还没结束),然后就让后面的车先过来,就这样大家轮流着通过路口了,你看,感觉像是一下子就通过了20辆车,其实是小姐姐工作做的好,大家轮流通过的..(这里解释比较粗糙,涉及到CPU时间片轮转机制,CPU处理任务很快,可能几毫秒就完成了很多任务,所以给人的错觉就是同时处理了多个任务,有兴趣的可以去查阅相关资料)

上面栗子中,5个车道代表物理机器的总逻辑线程数量上限是5,路上20辆车代表进程中的线程数量是20,现在进程中的线程数(20)>机器总逻辑线程数量(5),此时并发运行。



六、机器线程数 

linux查看命令:grep 'processor' /proc/cpuinfo | sort -u | wc -l

windows查看(个人机器):

        1.打开“任务管理器”

        2.点击“性能”

        3.点击“CPU”

        4.查看“逻辑处理器”

截图如下,也就意味着我的机器某段时间内,最大处理线程数量为8,当进程的线程数量<=8,属于并行运行任务,当进程的线程数量>8,属于并发运行任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值