zoukankan      html  css  js  c++  java
  • 如何减少并发编程中的上下文切换

    一、首先,看看有什么工具可以度量上下文切换带来的消耗。

    使用Lmbench3(一个性能分析工具)可以测量上下文切换时长

    使用vmstat可以测量上下文切换的次数。

    例如:在lunix命令界面:vmstat  2 1

     

    CS(Content Switch)表示上下文切换的次数,从上面的测试结果中我们可以看到,上下文每一秒切换307次。

    二、如何减少上下文切换

    减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。

     1. 无锁并发并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,

    可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。

     2. CAS算法。Java的Atomic包使用CAS算法来更新数据,而不需要加锁。

    CAS:Compare and Swap,是比较并交换的意思。

    CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。

    http://www.cnblogs.com/onlywujun/articles/3529572.html

     3. 使用最少线程。避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态。

      4.协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。

    来源:《Java并发编程的艺术》

    IT技术和行业交流群 417691667

  • 相关阅读:
    【基础】Attribute的妙用
    【翻译】.Net Core的意义
    【基础】迭代器详解
    【总结】数据库索引的实现原理
    【实践】基于接口的插件机制
    【总结】设计模式应用之单例模式
    【基础】多线程更新窗体UI的若干方法
    【基础】MVC路由规则
    Mybatis 分页:Pagehelper + 拦截器实现
    这四种对象属性拷贝方式,你都知道吗?
  • 原文地址:https://www.cnblogs.com/sun-rain/p/5727558.html
Copyright © 2011-2022 走看看