网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax
网络瓶颈:网络传输性能及稳定性的一些相关元素
线程死锁:多个线程因竞争资源造成的一种僵局
下面我们通过一些实例来说明死锁现象。
先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同时占用一个资源,等待另一个资源,这个时候甲在等待乙吃完并释放它占有的筷子,同理,乙也在等待甲吃完并释放它占有的筷子,这样就陷入了一个死循环,谁也无法继续吃饭。。。
在计算机系统中也存在类似的情况。例如,某计算机系统中只有一台打印机和一台输入 设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。
二、死锁产生的原因
1) 系统资源的竞争
2) 进程推进顺序非法
3) 死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。
互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。即存在一个处于等待状态的进程集合{Pl, P2, ..., pn},其中Pi等 待的资源被P(i+1)占有(i=0, 1, ..., n-1),Pn等待的资源被P0占有,如图2-15所示。
三、如何避免死锁
在有些情况下死锁是可以避免的。三种用于避免死锁的技术:
- 加锁顺序(线程按照一定的顺序加锁)
- 加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
- 死锁检测
那么当检测出死锁时,这些线程该做些什么呢?
一个可行的做法是释放所有锁,回退,并且等待一段随机的时间后重试。这个和简单的加锁超时类似,不一样的是只有死锁已经发生了才回退,而不会是因为加锁的请求超时了。虽然有回退和等待,但是如果有大量的线程竞争同一批锁,它们还是会重复地死锁(编者注:原因同超时类似,不能从根本上减轻竞争)。
一个更好的方案是给这些线程设置优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。如果赋予这些线程的优先级是固定不变的,同一批线程总是会拥有更高的优先级。为避免这个问题,可以在死锁发生的时候设置随机的优先级。
---------------------
作者:jayxu无捷之径
来源:CSDN
原文:https://blog.csdn.net/ls5718/article/details/51896159
版权声明:本文为博主原创文章,转载请附上博文链接!内存泄露:内存申请后,用完没有释放,造成可用内存越来越少。C语言
内存溢出:用户实际的数据长度超过了申请的内存空间大小,导致覆盖了其他正常数据,容易造成程序异常,严重的,攻击者可用以此获取程序的控制权
栈(stack):系统自动分配空间,char a,运行后自己释放,像桶或盒子,后进先出
堆(heap):程序员根据需要自己申请空间,malloc(10),10个字节空间,程序员忘记释放后会造成内存泄露
AJAX:不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网友内容
转载于:https://www.cnblogs.com/gdf456/p/9879031.html
网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax相关推荐
- c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...
目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...
- 内存溢出、内存泄露的概述及常见情形
内存溢出(OutofMemoryError) 简述 java doc 中对 Out Of Memory Error 的解释是,没有空闲内存,并且垃圾收集器也无法提供更多内存. JVM 提供的内存管理机 ...
- 内存泄露从入门到精通三部曲之基础知识篇
一.首先以一个内存泄露实例来开始本节基础概念的内容: 实例1:(单例导致内存对象无法释放而泄露) 可以看出ImageUtil这个工具类是一个单例,并引用了activity的context. 试想这个场 ...
- Android内存泄露总结
内存泄露是如何产生的? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...
- JVM内存管理概述与android内存泄露分析
一.内存划分 将内存划分为六大部分,分别是PC寄存器.JAVA虚拟机栈.JAVA堆.方法区.运行时常量池以及本地方法栈. 1.PC寄存器(线程独有):全称是程序计数寄存器,它记载着每一个线程当前运行的 ...
- 内存泄露从入门到精通三部曲之常见原因与用户实践
2019独角兽企业重金招聘Python工程师标准>>> 内存泄露从入门到精通三部曲之常见原因与用户实践 腾讯Bugly特约作者: 姚潮生 常见原因 1.集合类 集合类如果仅仅有添加元 ...
- 关于Android 的内存泄露及分析
博客园 首页 新随笔 联系 管理 订阅 随笔- 137 文章- 6 评论- 145 关于Android 的内存泄露及分析 一. Android的内存机制 Android的程序由Java语言编写, ...
- 什么情况下会导致内存泄露
Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M,有的可能是24M,当我们的内存占用超过了一定的程度后,就会出现OutOfMemory的错误. 下面说明几点可能导致内存泄露 ...
- Java内存泄露系列--内存泄露的原因及解决方案(大全)
原文网址:Java内存泄露系列--内存泄露的原因及解决方案(大全)_IT利刃出鞘的博客-CSDN博客 简介 简介 本文介绍Java中内存泄露的一些原因与解决方案. 如果内存泄露的空间足够大,就会导致内 ...
最新文章
- 据说程序员等电梯的时候都想过调度算法
- 存储ic载板_【热点】深南电路:通讯PCB维持增长 IC载板打造成长新核心
- Chrome 技术篇-常用web调试技巧清除缓存并硬性重新加载
- array_map常用技巧
- Spring Data JPA 从入门到精通~EntityManager介绍
- jQuery上传插件-uploadify3.1使用说明
- Kooteam 0.2.0 发布,新增周报、日报功能
- linux中,一个目录的权限是777,普通用户为什么删除不了它呢?
- WebHubBot 网络爬虫
- android测试工具Demo,Android 测试工具,实时抓被测app crash实现思路
- echarts 自定义图表custom
- cocos2d-x面试题(一)
- 信签纸有虚线怎么写_信签纸写作文格式怎么用
- web项目运行时无法重命名MySQL表问题排查
- 对于安装破解版BurpSuite无法用java打开注册机的问题
- 三招搞定你的ubuntu安全问题
- Navicat导出excel数据量过大解决方案
- [含论文+源码等]微信小程序居家养老+后台管理系统[包运行成功]
- Lucene初学——3. 分词器学习
- RTL8188EUS WIFI驱动编译与使用说明书
热门文章
- 在 ASP.NET 网页中不经过回发而实现客户端回调
- (转)Android笔记--handler机制
- 多个CALayer的联动
- 在 Windows XP 中,无法使用 Windows 图片和传真查看器来查看图片
- 合并下载的Solaris镜像为DVD文件的方法
- linux字符界面教程,打造字符界面的多媒体Linux系统
- 超越对手pdf_如何创建一个超越竞争对手的移动应用
- rxswift中hud_如何在RxSwift中运行测试
- LVS_NAT实现负载均衡
- (C++)1036 跟奥巴马一起编程