第五章--Java多线程和并发编程 第一节--多进程和多线程简介

多进程概念(1):

----当前的操作系统都是多任务OS(在windows上同时写着文档,听着音乐,聊着QQ,同时打开好几个应用程序)

----每个独立执行的任务就是一个进程

----OS将时间划分为多个时间片(每个时间片很短,可能只有几个纳秒几个微秒)

----每个时间片内将CPU分配给某一个任务,时间片结束,CPU将自动回收,再分配给另外任务。从外部看,所有任务是同时在执行(音乐一直在放,QQ一直在接收消息)。但是在CPU上,任务是按照串行顺序依次运行(假设在单核CPU上运行,CPU一直在工作,空闲状态有个空闲进程)。如果是多核CPU,多个进程任务可以并行(任务A分配到第一个核,任务B分配到第二个核)。但是单个核上,多进程只能串行执行(使用者感官上认为是同时执行的)。

多进程概念(2):

多进程的优点:(OS最开始是单个进程,单作业系统,到后来的多任务OS)

(1)可以同时运行多个任务

(2)程序因IO堵塞时,可以释放CPU(这时CPU是空闲的所以可以释放),让CPU为其他程序服务(CPU是计算的组件,我们希望提高CPU的利用率,当前状态IO堵塞了,CPU处于空闲的状态,即idle状态,就释放掉让它为其它程序工作)

(3)当系统有多个CPU时,可以为多个程序同时服务

----我们的电脑都是四核、八核,为什么有这个多个核(多个CPU),因为CPU的发展,我们的CPU不再提高频率了,由于受到晶体管数量和系统运行时产生出来的热量的限制,那么CPU已经在频率上没法提高了。CPU频率提高到3G到4G时,频率不再提高了,因为固定面积下晶体管数量没法再加了

----2005年Herb  Sutter的文章The  free  lunch  is  over,指明多核和并行程序才是提高程序性能的唯一办法。什么是免费午餐,如果我们想提高程序的运行速度,只能换CPU,更好的频率更大的CPU即可

把程序分成很多个小程序,可以同时在很多CPU上同时执行

多进程的缺点:

(1)太笨重,不好管理

OS层面说,进程比较大,OS能同时打开多少个应用程序(可以理解成能同时打开多少个进程),一个计算机能同时运行多少个进程,总归是有限的,可能几百个,基本上机器就很慢了,内存都被消耗完了

(2)太笨重,不好切换

比如IO堵塞时,可以释放CPU,让CPU去服务别的程序,对于CPU来说,需要把另一个程序的内容加载进来,进程的内容比较多,做进程切换的时候,不好切换

多线程概念:

----一个程序可以包括多个子任务,可串 / 并行(比如main函数有很多内容,可以把这些内容组合成很多模块,一个函数一个模块,我就分模块来编程。一个程序可以包括多个子任务,只要子任务之间,耦合关系较少,不存在先后执行顺序)

----每个子任务可以称为一个线程

----如果一个子任务阻塞,程序可以将CPU调度另外一个子任务进行工作。这样CPU还是保留在本程序中,而不是被调度到别的程序(进程)去。这样,提高本程序所获得CPU时间和利用率

多进程和多线程对比:

(1)线程共享数据(线程都属于同一个程序里面,只是不同的子模块,它们之间可以共享一部分数据)

(2)线程通讯更加高效(线程都属于同一个程序,兄弟模块。而进程和进程之间比如word和QQ之间怎么交换数据就很难交换)

(3)线程更轻量级,更容易切换(线程切换的时间少代价更小,CPU的利用率更大)

(4)多个线程更加容易管理

举个例子:进程的demo

线程的demo:

第6行的start方法将会调用第17行的run方法(第17行的run方法以线程的方式执行)

通过这个例子可以看出,多线程因为在一个程序里面,它们的通讯、协调、同步比起多进程都是比较容易做的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值