线程带来的风险

1. 安全性问题

2. 活跃性问题

3. 性能问题

安全性的含义是“永远不发生糟糕的事情”,而活跃性则关注于另一个目标,即“某件正确的事总会发生”。当某个操作无法继续执行下去的时候就会发生活跃性问题。例:如果线程A在等待线程B释放资源,而线程B永远不释放资源,那A就会永远等待下去。

活跃性问题包括:死锁、饥饿、活锁等。

活跃性意味着某件正确的事情最终会发生,但却不够好,因为我们通常希望正确的事情尽快发生。性能问题包括多个方面,例如服务时间过长,响应不灵敏,吞吐率过低,资源消耗过高,或者可伸缩性较低等。与安全性和活跃性一样,在多线程程序中不仅存在与单线程程序相同的性能问题,而且还存在由于使用线程而引入的其他性能问题。

在多线程程序中,当线程调度器临时挂起活跃线程并转而运行另一个线程时,就会频繁地出现上下文切换操作,这种操作将带来极大的开销:保存和恢复执行上下文,丢失局部性,并且CPU时间将更多地花在线程调度而不是线程运行上。当线程共享数据时,必须使用同步机制,而这些机制往往会抑制某些编译器优化,使内存缓存区中的数据无效,以及增加共享内存总线的同步流量。

时间: 2024-10-18 12:02:58

线程带来的风险的相关文章

java 线程 (一): 并发简介

这两天在读<java并发编程实战>,好久没写东西了,准备开始除草.^_^ 并发编程由来: 早年的计算机中没有操作系统,在某个时间段内只支持运行一个程序,并且这个程序能访问计算机的所有资源.在这个程序完全执行完后,再执行下一个程序. 引入并发编程的好处: 高效性:计算机的各个部件不用忙等,例如一个程序在使用IO的时候,CPU可以给另外一个程序使用.这样便提高了设备的使用率. 公平性:计算机上运行的程序应该一视同仁,而不是某一个先执行完后,再让另外一个程序开始执行. 便利性:在计算多个任务时,应该

解决线程安全问题

线程带来的风险 线程安全性问题 出现安全性问题的需要满足的条件:多线程环境.有共享资源.非原子性操作 活跃性问题 死锁 饥饿 活锁 性能问题 cpu上下文切换会有性能问题(cpu分时间片执行) 锁 自旋锁 自旋其实就是当一个线程获取到锁之后,其他的线程会进行阻塞等待,一直到这个线程释放锁后才能进入 重入锁 & 锁重入 锁重入即在一个对象中对两个方法都加锁了,那么在一个线程获取到其中一个方法的锁后,再执行另外一个方法时就不再需要获取锁了:同时如果一个线程获取到了其中一个方法的锁,那么其他的线程既不

第1章 简介

编写正确的程序很难,而编写正确的并发程序则难上加难.与串行程序相比,并发程序中存在更多容易出错的地方.那么,为什么还要编写并发程序?线程是Java语言中不可或缺的重要功能,它们能使复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发.此外,要想充分发挥多处理器系统的强大计算能力,最简单的方式就是使用线程.随着处理器数量的增长,如何高效地使用并发正变得越来越重要. 1.1 并发简史 操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行:操作系统为各个独立执行的进程分配

漫谈并发编程(一) - 并发简介

并发编程是每个程序员进阶的必修之课,想写一个安全稳定,性能强劲的并发程序可没那么容易.我将在未来的日子里,与大家分享一个并发小白成长路上的所思所想.并发编程的思想是通的,但是例子得要是具现的,在该系列中将使用java语言用以演示. 此文作为为漫谈并发编程系列的第一篇,由于本人喜欢先论理再论事,而非先论事再论理,所以就以一篇对并发的文字描述开头了. 并发编程由来 早年的计算机中没有操作系统,在某个时间段内只支持运行一个程序,并且这个程序能访问计算机的所有资源.在这个程序完全执行完后,再执行下一个程

并发一些概念

进程之间通讯用什么: 套接字.信号处理器.共享内存.信号量.文件. 线程之间通讯用什么: 线程的好处: 降低开发维护成本,提高程序性能,提高资源利用率和系统吞吐量. 线程带来的风险: 线程安全问题:永远不要发生糟糕的事情 线程的活跃性问题:某件正确的事情最终会发生.比如,死锁 饥饿 活锁(不明白) 性能问题: 上下文切换开销: 保存和恢复上下文 丢失局部性 cpu化时间在线程调度 线程共享数据时,必须同步,会抑制编译器优化,使内存缓冲区数据失效,增加共享内存总线同步流量. 同步方式: synch

漫谈并发编程(一) - 并发简单介绍

并发编程是每一个程序猿进阶的必修之课,想写一个安全稳定,性能强劲的并发程序可没那么easy.我将在未来的日子里,与大家分享一个并发小白成长路上的所思所想.并发编程的思想是通的,可是样例得要是具现的,在该系列中将使用java语言用以演示. 此文作为为漫谈并发编程系列的第一篇,探本溯源,以一篇对并发的文字描写叙述开头. 并发编程由来 早年的计算机中没有操作系统,在某个时间段内仅仅支持运行一个程序,而且这个程序能訪问计算机的全部资源.在这个程序全然运行完后,再运行下一个程序. 在此时,引入并发编程的优

《Java并发变成实践》读书笔记---第一章 简介

<Java并发编程实战>深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册.书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险.构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,如显式锁.原子变量.非阻塞算法以及

《Java并发编程实战》/童云兰译【PDF】下载

<Java并发编程实战>/童云兰译[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062521 内容简介 本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册.书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险.构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子

Java并发编程实战(中文版)pdf

下载地址:网盘下载 内容简介  · · · · · · 本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册.书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险.构造线程安全的类及验证线程安全的规则,如何将小的线程安全类组合成更大的线程安全类,如何利用线程来提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单线程子系统的响应性,如何确保并发程序执行预期任务,如何提高并发代码的性能和可伸缩性等内容,最后介绍了一些高级主题,