线程的高并发"/>
java线程的高并发
多线程,高并发
三丰 soft张三丰
繁华落幕离人难敢诉衷肠 昨夜又见当年弃我不归郎 今夜太漫长,今两股痒痒 今人比枯叶瘦花黄 我应在江湖悠悠,饮一壶浊酒 醉里看百花深处愁
进程和线程
一个程序就是一个进程,而一个程序中的多个任务则被称为线程。
进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。
举个例子:
打开你的计算机上的任务管理器,会显示出当前机器的所有进程,QQ,360等,当QQ运行时,就有很多子任务在同时运行。比如,当你边打字发送表情,边好友视频时这些不同的功能都可以同时运行,其中每一项任务都可以理解成“线程”在工作。
多线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行。
通过下图来区别单线程程序与多线程程序的不同:
l 单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。如,去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。
l 多线程程序:即,若有多个任务可以同时执行。如,去网吧上网,网吧能够让多个人同时上网。
程序运行原理
l 分时调度
所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
l 抢占式调度
优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
抢占式调度详解
大部分操作系统都支持多进程并发运行,现在的操作系统几乎都支持同时运行多个程序。比如:现在我们上课一边使用编辑器,一边使用录屏软件,同时还开着画图板,dos窗口等软件。此时,这些程序是在同时运行,”感觉这些软件好像在同一时刻运行着“。
实际上,CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。
其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
解决高并发
真正厉害的人一定是在复杂业务的系统里面玩过高并发架构的人,一般来说,分为以下几点:
系统拆分
把一个系统拆分成多个子系统,用dubbo来做,然后每个系统会连成一个数据库。本来是一个数据库,现在多个数据库,也可以实现高并发。
缓存
在高并发的场景下,最好在数据库和缓存里进行备份,这样在读取的时候就会大量走缓存,用缓存扛高并发。
MQ
在工作中,很容易出现高并发写的场景,如果一个业务操作员频繁的进入数据库,增删改增删,那高并发一定会导致系统崩溃。这个时候可以使用MQ,大量写请求灌入MQ里,控制在mysql承载范围之内。
分库分表
分库分表可能到最后数据库层面还是会出现抗高并发的要求,这时最好把一个数据库拆分为多个库,用多个库扛更高的并发。
读写分离
大部分数据库都是读多写少,因此没有必要都集中在一个库上。可以做主从架构,主库写入,从库读取。在读流量太多的时候,可以加更多的库。
更多推荐
java线程的高并发
发布评论