十分钟带你了解多线程,阻塞与非阻塞,高并发(纯理念)

十分钟带你了解多线程,阻塞与非阻塞,高并发(纯理念)

1.线程与进程
线程:信息不共享,因为线程需要拥有:

  1. 线程id
  2. 寄存器组的值
  3. 线程的堆栈
  4. 错误返回码
  5. 线程的信号屏蔽吗
    进程:信息共享,因为进程可由多个线程组成,多个线程可以互相通信

2.线程的隐藏数量,与java的渊源
线程与java是息息相关的,大家都知道线程是可以按照java程序创建出来的,那你是否监测过你创建
的线程数目是否与你创建的一样多呢!
结论是你用java创建线程时去电脑线程监控查看时,电脑监控的线程数目永远要比你创建的线程多!
这是为什么呢?

  1. jvm自启动会创建一些线程
  2. debugger观察
  3. Gc会引发一些线程

3.多线程的作用?多线程的局限与应用场景?
多线程的作用:

  1. 提高cpu的利用率(单线程永远无法充分利用cpu,那么铁子的钱不就白花了么!)
  2. 提高用户体验(避免程序卡顿,缩短等待时间,用多个线程去接受http的请求)
  3. 符合摩尔定律
  4. 符合阿姆达尔定律(简单来说:就是处理器越多,程序越快,但是有上限,不是局限与你的钱,
    是取决于程序中串行部分的比例,并行比例越高越快)

4.多线程的局限性与应用
应用:一般用于任务结构一样,铁子可别 用多线程处理不同的业务,那你报错了我可不管
局限:
性能问题(上下文切换带来消耗)
异构化(说白了就是你想用多线程跑不同的方法,还是乖乖跑一个方法吧,例如:你要把2000条数据
分别取出来取调用某个方法,这个方法是这2000个程序都必走的路,那你直接干多线程就行。案例需要的话@我)
带来线程不安全(可以分段map保存线程安全)
导致线程饥饿(A没走完整个流程,B一直在原点等)
死锁(互相占用资源不肯放手)

5.并行与并发
在这里插入图片描述
老铁看见上面的图了么
并发:一个处理器多个线程(某一时间点一致)
并行:多个处理多个线程(物理并行)

6.高并发
含义:很多请求同事向服务器请求
解决方案:多线程
高并发并不一定要多线程处理,redis缓存也可以
衡量高并发数量指标:
QPS每秒查询数
带宽
Pv 一天访问量
Uv 访问数量

7.同步与异步
同步与异步(字段描述用于服务端):
同步:调用者调用服务器的时候,服务器把所有流程走完才返回结果
异步:调用者调用服务器,服务器立马做了响应,然后继续后台走他的业务逻辑

阻塞与非阻塞
阻塞:调用者中途因为某个业务停止,就不在走下一个方法
非阻塞:调用者某个方法执行失败,还要继续走下一个业务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值