专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 编程基础教程,Java并发编程入门

编程基础教程,Java并发编程入门

更新时间:2020-05-28 16:46:52 来源:动力节点 浏览1660次

基础概念

进程:进程是程序运行资源(包括CPU,内存、IO等)分配的最小单位,有自己的独立地址空间,是一个具有一定独立功能的程序在操作系统中的一次执行过程。同一进程中的多个线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。

线程:线程是程序执行的最小单位,是CPU调度和分派的基本单位,线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,寄存器和栈),线程必须依赖于进程而存在。

CPU时间片轮转调度:百度百科解释,时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

时间片轮转调度中唯一有趣的一点是时间片的长度。从一个进程切换到另一个进程是需要一定时间的--保存和装入寄存器值及内存映像,更新各种表格和队列等。假如进程切换(process switch)-有时称为上下文切换(context switch),需要5毫秒,再假设时间片设为20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU时间的20%被浪费在了管理开销上。

为了提高CPU效率,我们可以将时间片设为500毫秒。这时浪费的时间只有1%。但考虑在一个分时系统中,如果有十个交互用户几乎同时按下回车键,将发生什么情况?假设所有其他进程都用足它们的时间片的话,最后一个不幸的进程不得不等待5秒钟才获得运行机会。多数用户无法忍受一条简短命令要5秒钟才能做出响应。同样的问题在一台支持多道程序的个人计算机上也会发生。

结论可以归结如下:时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折中。

并发:假如一个CPU只能分配给一个进程,并发就是指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

并行:并行是指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。举个例子:银行柜台办理业务,假如只有3个窗口,那么同一时刻办理业务时最多允许的并行人数就为3,其他人就必须的排队等候,假设每一个窗口10分钟能办理一个人,那么可以认为该银行每10分钟能并发处理3个人。

并发编程的优势:由于多核多线程的CPU的诞生,多线程、高并发的编程已经成为程序员的必备技能。并发编程的好处,首先,最直接的体现就是缩短了用户的响应时间,比如自己系统要同时调用A,B,C三个系统,数据之间没有依赖,用单线程的方式如下:

编程基础教程,Java并发编程入门

多线程调用方式如下:

编程基础教程,Java并发编程入门

其次,并发编程更加充分的利用了CPU的资源,减少了CPU的空闲时间,发挥它的运算能力,比如一个4核8线程的CPU,如果只有一个单线程程序在运行,那么意味着有7/8的CPU性能被浪费;最后,可以使代码模块化,异步化,避免因为某个环节阻塞导致整个程序阻塞。

并发编程注意事项:

(1)线程之间的安全性,在同一个进程里面的多线程是资源共享的,对共享变量的读写,一般都需要考虑线程同步,否则可能影响线程安全;

(2)线程之间的死锁,所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。比如有一个保险柜和一把钥匙,甲,乙分别获得保险柜和钥匙,这时候甲要打开保险柜就要乙的钥匙,乙要打开保险柜就要甲的保险柜,2人互相不信任,保险柜就没法打开,阻塞住了;

(3)线程数太多有可能造成系统创建大量线程而导致消耗完系统内存以及CPU的“过渡切换”,造成系统的死机。

以上就是动力节点java培训机构的小编针对“编程基础教程,Java并发编程入门”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>