并发:线程的优势及风险

本文参考《java并发编程实战》,java并发必读书籍

一、线程的优势

1.发挥多处理器的强大能力

一个线程对应一个处理器

 

2.建模的简单性

通过使用线程,可以将复杂并且异步的工作流进一步分解为一组简单并且同步的工作流;

每个工作流在一个单独的线程中运行

并在特定的同步位置进行交互

 

3.异步事件的简化处理

在服务器应用程序在接受多个远程客户端的套接字连接请求时:为每个连接都分配独立的线程并且使用同步I/O

降低了开发难度

 

4.响应更灵敏的用户界面

传统的GUI应用程序:主事件循环

现代的GUI框架:事件分发线程

 

二、线程带来的风险

1.安全性问题(目标:永远不发生糟糕的事情)

存在竞态条件(Race Condition)时,会产生安全性问题

例如

private int value;

public int getNext() {
    return value++;
}

value++ 

等价于

temp = value;

value = value + 1;

value = temp;

 

2.活跃性问题(目标:正确的事情最终会发生)

担心的是:死锁、饥饿、活锁(这些不懂得可以关注后续文章)

 

3.性能问题(目标:正确的事情尽快发生)

线程带来开销

上下文切换操作开销:保存和恢复执行上下文,丢失局部性,CPU时间更多的花在线程调度而不是线程运行上

抑制编译器优化(比如重排序)

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值