多线程中需要理解的名词

6 篇文章 0 订阅
5 篇文章 0 订阅
同步异步

同步和异步通常用来形容一次方法的调用,同步方法一旦调用,调用者必须等到方法返回后才能继续向下执行,异步调用方法会立刻返回,继续执行接下来的操作,而异步方法通常是开另一个线程去执行这个方法。

临界区

临界区表示公共资源,可以被多个线程使用,但每次只能由一个线程使用,其他线程等待。

阻塞和非阻塞

阻塞:一个线程占用了临界资源,那么其他所有需要这个资源的线程就必须在这个临界区中等待,等待的线程会挂起,这就是阻塞。

非阻塞:没有一个线程可以妨碍其他线程的执行,所有线程都尝试不断向前执行。

死锁、饥饿、活锁

死锁的概念:两个或两个以上的进程执行过程中互相拥有对方所需要的资源,都不肯释放,最终造成阻塞。死锁的经典问题就是哲学家问题

饥饿的概念:弱肉强食的规则,优先级高的线程总是优先执行,最终“饿死”优先级低的线程。

活锁:相对于死锁理解,死锁是互相不谦让资源导致阻塞,活锁是互相释放对方的资源,就和我们平时走特别窄的路,迎面来的人和你互相谦让,结果还是过去不,重复两三次后,人可以通过交流来避免这种阻塞,线程比较傻就只能一直阻塞了。

并发级别

1》阻塞
容易造成死锁,当没有执行所需的临界资源就会挂起等待,知道资源被释放
2》无饥饿
对于线程的优先级来说,线程调度会优先满足优先级高的线程,但无饥饿策略下所有线程都要排队,保证每个线程都有机会占用临界资源。
3》无障碍
线程在使用临界区资源的时候不会考虑临界区是否被占用,都会进入临界区使用资源,共同修改数据,当出现问题后会立即对自己修改的数据进行回滚,确保数据安全,如果没发生临界区问题就会完成自己的任务释放临界区资源。
4》无锁
与无障碍相似,不同的是,无锁的并发保证必有一个线程会在有限步内完成任务离开临界区,不至于全军覆没。
5》无等待
无锁的基础上更进一步,要求所有线程都在一定步数内完成,这样就不会引起饥饿问题。典型无等待结构就是 RCU(Read-Copy-Update) ,读不加控制,所有线程读不会等待,写的时候取得原始数据的副本,对副本进行写操作,完成后在合适时机回写数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值