高并发编程教程讲解,什么是高并发编程

kodinid 11 0

大家好,今天小编关注到一个比较意思的话题,就是关于高并发编程教程讲解的问题,于是小编就整理了2个相关介绍高并发编程教程讲解的解答,让我们一起看看吧。

  1. 如何理解java中的并发编程与多线程?
  2. jvm与并发编程先学哪个比较好?

如何理解java中的并发编程与多线程

并发:同一时间段有几个程序都处于已经启动运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥;

互斥:进程之间访问临界***时相互排斥的现象;

高并发编程教程讲解,什么是高并发编程-第1张图片-安济编程网
图片来源网络,侵删)

同步:进程之间存在依赖关系,一个进程结束输出作为另一个进程的输入。具有同步关系的一组并发进程之间发送的信息称为消息或者***;

并行:单处理器中进程被交替执行,表现出一种并发的外部特征;在多处理器中,进程可以交替执行,还能重叠执行,实现并行处理,并行就是同事发生的多个并发***,具有并发的含义,但并发不一定是并行,也就是说***之间不一定要同一时刻发生;

多线程:多线程是进程中并发运行的一段代码,能够实现线程之间的切换执行;

高并发编程教程讲解,什么是高并发编程-第2张图片-安济编程网
(图片来源网络,侵删)

异步:和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个***的过程中继续做自己的事,不要等待这一***完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。

异步和多线程:不是同等关系,异步是目的,多线程只是实现异步的一个手段,实现异步可以***用多线程技术或者交给其他进程来处理。

要理解并发的含义,首先要知道并发产生的原因。当多个CPU处理器同时执行一条写操作指令时,就会因为CPU在执行过程中会存在穿插执行的可能,从而造成数据紊乱(如果只有读操作,是没有并发问题的)。为了解决穿插执行的问题,CPU就提供了机制来解决并发问题。

高并发编程教程讲解,什么是高并发编程-第3张图片-安济编程网
(图片来源网络,侵删)

只有CPU提供了性指令,上层应用才能够根据这些指令来设计出指令段与指令段之间的原子性操作。这是一种自底向上的设计,没有CPU最底层支持,上层应用根本就无法解决并发问题。应用程序使用自身语言提供的并发操作函数库,比如j***a的juc包,而这些函数库又会封装OS的系统调用或者使用glibc库,OS的系统调用最终会使用CPU提供的原子性指令。

可以看看下面这两篇文章,讲解了CPU是如何支持并发的,上层语言的并发函数库是对底层的封装:

并发原理—CPU原子性指令(一)

并发原理—如何保证多条指令的原子性(二)

[并发]比如你开了一家饭馆,最多可以供50人同时在店里吃饭,今天生意好,一下同事来了100个客人,这就是并发了。那技术上怎么做呢,最简单思维就是“排队”,queue队列技术,再就是分布式部署,分流请求,可以理解为开分店。

[多线程]同样是饭店,客人点了五个菜,一个普通厨师同时只能做一个菜,但是经验老到的厨师,可以一遍煲汤,一边炒菜等,这就是多线程了。那技术上怎能做呢,最简单的就是自己实现thread,start启动了。

jvm与并发编程先学哪个比较好?

个人感觉没有啥先后顺序,不过先学jvm你能读明白字节码,一些多线程的例子反编译过来看字节码能明白一些事,比如监视器怎么加的。或者你知道了jvm内存几个区域,有的地方不涉及到共享问题,也不会线程不安全。多线程可以看看j***a高并发程序设计本书。jvm可以看看深入j***a虚拟机这本书。有条件的话,经常用生产上的机器解决一些问题,比如内存满了用jmap和mat分析,这样能加强你对jvm熟悉,同时也可以对生产环境进行jvm调优。如果出现应用卡死,可能有死锁,大事物,死循环这样的,你可以用jstack和jstat去分析线程栈,会学到一些多线程的知识。同时你可以用gceasy这个在线工具把你的堆栈上传上去,有个可视化的分析。另外阿里的arthas是个调试神器,jprofiler可以可视化很多东西。xxfox也是个在线学习jvm的好网站

如果你愿意的话,当你想深入线程的话,可以看看posix线程规范pthread和linux内核的一些知识,能加强你对j***a线程的理解以及j***a内存分配的理解。

除了书,推荐你极客时间的j***a并发编程实战,深入拆解jvm虚拟机。如果你还想对jvm再深入的话,可以看看open[_a***_]源码,需要有c的底子,还有自己动手写j***a虚拟机这本书。

到此,以上就是小编对于高并发编程教程讲解的问题就介绍到这了,希望介绍关于高并发编程教程讲解的2点解答对大家有用。

标签: 并发 多线 线程