9月4日,Mono 3.8.0发布了.该版本的运行时带来了一些性能和可伸缩性方面的改进,同时完成了向Windows平台的移植. Mono遵循Gnome和Linux内核的版本编号策略,这意味着3.8是3.6(已于上个月发布)之后的一个主要的稳定版本.该版本在性能方面有所改进: JIT可以更好地处理除数为2的幂的long型的取余操作,生成的代码效果好很多.之前long型的取余操作不会像int类型那样特殊处理.(作为一种编译优化,通常2的幂的乘除运算会替换为移位操作.) 对于只调用一次的委托,可以生成…
Mono是Xamarin资助的一个项目,是微软的.NET框架的开源实现.它使得使用C#.F#和其他.NET语言进行跨平台开发成为可能.Xamarin在Mono之上构建了跨平台开发工具以及像Xamarin.Forms(可以使用跨平台代码辅助创建原生的体验)这样的框架产品.开发工具和框架在开发者之间都有应用(Xamarin最近获得了5400万美元C轮融资,会继续在这方面发力).Xamarin也已经在和微软开展合作,以改进.NET和Mono之间的兼容性.ASP.NET vNext(尤其是KRuntim…
第10章 避免活跃性危险 10.1 死锁 -10.1.1 锁顺序死锁 最简单的一种死锁形式: -10.1.2 动态的锁顺序死锁 可以通过下面的方法来解决: -10.1.3 在协作对象之间发生死锁 -10.1.4 开放调用 如果在调用某个方法时不需要持有锁,那么这种调用就被称为开放调用. -10.1.5 资源死锁 当多个线程在相同资源上等待时,也会发生死锁. 10.2 死锁的避免与诊断 -10.2.1 支持定时的锁 显示使用Lock类中的定时tryLock功能(见13章)来代替内置锁机制. -10…
造成开销的操作包含: 1. 线程之间的协调(比如:锁.触发信号以及内存同步等) 2. 添加�的上下文切换 3. 线程的创建和销毁 4. 线程的调度 一.对性能的思考 1 性能与可伸缩性 执行速度涉及下面两个指标: 某个指定的任务单元须要"多快"才干处理完毕.计算资源一定的情况下,能完毕"多少"工作. 可伸缩性: 当添加�计算资源时(比如:CPU.内存.存储容器或I/O带宽),程序的吞吐量或者处理能力能对应地添加�. 2 评估各种性能权衡因素 避免不成熟的优化.首先使…
<java并发编程实战>的第9章主要介绍GUI编程,在实际开发中实在很少见到,所以这一章的笔记暂时先放一放,从第10章开始到第12章是第三部分,也就是活跃性.性能.与测试,这部分的知识偏理论多一些,但是尽量能用代码讲明白的问题就不用文字,话不多说,进入正题. 一.死锁 在学习java基础的时候就听老师讲过“哲学家就餐”的例子,时间久了具体是怎么回事也容易忘,这里重新整理下.5个哲学家去吃中餐,坐在一张圆桌旁,他们有5根筷子(不是5双),并且每两个人中间放一根筷子,每个人需要一双筷子才能吃到东西…
线程的最主要目的是提高程序的运行性能,但性能的提升会导致复杂性的提升,又会导致安全性和活跃性的风险 一.对性能的思考 提升性能意味着用更少的资源做更多地事情.要想通过并发来获得更好的性能,就要更有效地利用现有处理资源 线程使用的额外的性能开销:线程之间的协调(例如加锁.触发信号以及内存同步等),增加的上下文切换,线程的创建和销毁,以及线程的调度等 1.性能与可伸缩性(多块vs多少) 性能通过服务时间.延迟时间.吞吐率.效率.可伸缩性以及容量等衡量 当进行性能调优时,其目的通常是用更小的代价完成相…
性能与可伸缩性 一.Amdahl定律 1.问题和资源的关系 在某些问题中,资源越多解决速度越快:而有些问题则相反: 注意:每个程序中必然有串行的部分,而合理的分析出串行和并行的部分对程序的影响极大:串行部分占比和多核执行效率之间是指数级别的关系 2.ConcurrentLinkedQueue 在多核环境中,这个线程安全的队列比通过synchronizedList生成的队列速度要快很多 可以说:concurrent中提供的类,比通过方法生成的线程安全类速度要快 二.线程开销 由于多线程有开销:所以…
CDN系统对网站的性能有极大的提升 打开一个网站 我们只是请求了一个页面.单个页面,实际上所有文件都是一个新的请求.以新浪为例一共发起了35个请求. 这35个请求中.只有一个动态内容.其它均为静态.这样服务器实际上被访问35次. 如果我们把这些静态资源做到CDN上面.服务器就大大压轻了压力.只需要处理一个动态的请求就可以了. 所以把静态资源做到CDN上面,极大地减轻服务器请求数量.节省很大的成本.…
2018年技能提升报告Skill Up 2018 - Developer Skills Report | PACKT Bookshttps://www.packtpub.com/skill-up-2018 Packt发布了2018年技能提升报告的结果,旨在了解软件开发人员的工具使用情况和技能趋势.报告显示,Java 在编程语言中仍然占据主导地位,但 Kotlin 极有可能将其赶出移动开发的榜首. “2018 年技能提升报告”调查了 8000 多名开发人员和技术专家,他们分为四大类:应用程序开发,…
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采用mongodb天然的分片模式架构,数据均衡的分布于各个分片中,添加片键启用分片功能后实现完美的负载均衡.集群每个节点流量监控如下图所示: 从上图可以看出集群流量比较大,峰值已经突破120万/秒,其中delete过期删除的流量不算在总流量里面(delete由主触发删除,但是主上面不会显示,只会在从节…