java线程的高并发_多线程,高并发

多线程,高并发

三丰 soft张三丰

繁华落幕离人难敢诉衷肠 昨夜又见当年弃我不归郎 今夜太漫长,今两股痒痒 今人比枯叶瘦花黄 我应在江湖悠悠,饮一壶浊酒 醉里看百花深处愁

进程和线程

一个程序就是一个进程,而一个程序中的多个任务则被称为线程。

进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。

举个例子:

打开你的计算机上的任务管理器,会显示出当前机器的所有进程,QQ,360等,当QQ运行时,就有很多子任务在同时运行。比如,当你边打字发送表情,边好友视频时这些不同的功能都可以同时运行,其中每一项任务都可以理解成“线程”在工作。

多线程

什么是多线程呢?即就是一个程序中有多个线程在同时执行。

通过下图来区别单线程程序与多线程程序的不同:

l 单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。如,去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。

l 多线程程序:即,若有多个任务可以同时执行。如,去网吧上网,网吧能够让多个人同时上网。

9b5a12ad7084d798f3bd9be65b18c202.png

程序运行原理

l 分时调度

所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

l 抢占式调度

优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

e918b308692d4f7793274b87b1cca45c.png

抢占式调度详解

大部分操作系统都支持多进程并发运行,现在的操作系统几乎都支持同时运行多个程序。比如:现在我们上课一边使用编辑器,一边使用录屏软件,同时还开着画图板,dos窗口等软件。此时,这些程序是在同时运行,”感觉这些软件好像在同一时刻运行着“。

e4faff104692b97686162adde3e15d84.png

实际上,CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。

其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

解决高并发

真正厉害的人一定是在复杂业务的系统里面玩过高并发架构的人,一般来说,分为以下几点:

系统拆分

60ec3eecd17773161f1aef5b0afa1e95.png

把一个系统拆分成多个子系统,用dubbo来做,然后每个系统会连成一个数据库。本来是一个数据库,现在多个数据库,也可以实现高并发。

缓存

在高并发的场景下,最好在数据库和缓存里进行备份,这样在读取的时候就会大量走缓存,用缓存扛高并发。

MQ

c7fc75041297784ec54122f226fe9c20.png

在工作中,很容易出现高并发写的场景,如果一个业务操作员频繁的进入数据库,增删改增删,那高并发一定会导致系统崩溃。这个时候可以使用MQ,大量写请求灌入MQ里,控制在mysql承载范围之内。

分库分表

分库分表可能到最后数据库层面还是会出现抗高并发的要求,这时最好把一个数据库拆分为多个库,用多个库扛更高的并发。

读写分离

9322a49745424ae81719f8c0c80a0e4d.png

大部分数据库都是读多写少,因此没有必要都集中在一个库上。可以做主从架构,主库写入,从库读取。在读流量太多的时候,可以加更多的库。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值