加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 业界 > 正文

利用机器学习进行静态分析

发布时间:2021-02-01 10:10:46 所属栏目:业界 来源:互联网
导读:12、线程思考 12.1. 变量建议使用栈封闭 所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。方法调用的时候会有一个栈桢,这是一个独立的空间。在这个独立空间创建跟使用则绝对是安全的,但是注意不要返回该变量哦! 12.2. 防止线程饥饿 优先级低的

12、线程思考

12.1. 变量建议使用栈封闭

所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。方法调用的时候会有一个栈桢,这是一个独立的空间。在这个独立空间创建跟使用则绝对是安全的,但是注意不要返回该变量哦!

12.2. 防止线程饥饿

优先级低的线程总是得不到执行机会,一般要保证资源充足、公平的分配资源、防止持有锁的线程长时间执行。

12.3 开发步骤

多线程编程不要为了用而用,引入多线程后会引入额外的开销。量应用程序性能一般:服务时间、延迟时间、吞吐量、可伸缩性。做应用的时候可以一般按照如下步骤:

  • 先确保保证程序的正确性跟健壮性,确实达不到性能要求再想如何提速。
  • 一定要以测试为基准。
  • 一个程序中串行的部分永远是有的.
  • 装逼利器:阿姆达尔定律 S=1/(1-a+a/n)

阿姆达尔定律中 a为并行计算部分所占比例,n为并行处理结点个数:

  • 当1-a=0时,(即没有串行,只有并行)最大加速比s=n;
  • 当a=0时(即只有串行,没有并行),最小加速比s=1;
  • 当n无穷大时,极限加速比s→ 1/(1-a),这就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。

12.4 影响性能因素

  • 缩小锁的范围,能锁方法块尽量不要锁函数
  • 减少锁的粒度跟锁分段,比如ConcurrentHashMap的实现。
  • 读多写少时候用读写锁,可提高十倍性能。
  • 用CAS操作来替换重型锁。
  • 尽量用JDK自带的常见并发容器,底层已经足够优化了。

虽然func函数是非线程安全的,但是我们在调用该函数前加了一把锁进行保护,那么这时funcA函数就是线程安全的了,其本质就是我们用一把锁间接的保护了全局变量。

再看这样一段代码:
 

为什么呢?

因为无论我们调用多少次func函数,static局部变量都只会被初始化一次,这种特性可以很方便的让我们实现单例模式。

最后让我们来看下这种情况,那就是如果我们调用一个非线程安全的函数,那么我们的函数是线程安全的吗?

调用非线程安全代码

假如一个函数A调用另一个函数B,但B不是线程安全,那么函数A是线程安全的吗?答案依然是,要看情况。我们看下这样一段代码,这段代码在之前讲解过:

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读