`
splayx
  • 浏览: 82635 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程下的一种编程模式

阅读更多

今天在优化项目,看了几个关键路径上的调用,

有些是可以并发的,有些是需要加写锁的,

如果想在整条调用路径上做文章相当复杂,需要时间做不少分析,

接着又发现虽然不少地方都有写锁,但是真正触发这些写锁的机会不是很大。

 

在这种情况下,突然有一种想法,就是另写一条没有写锁的调用路径,

无写锁路径上的方法写法十分简单,在原本方法触发写锁的地方直接返回调用失败就好了,

若无写锁路径调用失败,再调一次原始的路径也就OK了。

 

简单说来就是这样:

if (!MethodReadOnly()) {
    return Method();
}

 

bool MethodReadOnly() {
    ReadLock();
}

bool Method() {
    WriteLock();
}

 

这个简单的优化,使得效率高了不少。

事后想想,其实这种模式挺适合cache服务的。

 

1
1
分享到:
评论
4 楼 lazy_ 2013-04-15  
怎么感觉看起来像ReadWriteLock?
3 楼 splayx 2013-04-15  
方世玉 写道
自旋锁,用于读远大于写的并发场景很合适,参考JDK内部的CAS

自旋锁比较适合响应时间极快的代码段保护。我这里情况可能比较复杂的。不大合适。
2 楼 方世玉 2013-04-15  
自旋锁,用于读远大于写的并发场景很合适,参考JDK内部的CAS
1 楼 teasp 2013-04-15  
你这个是类似轻量级锁的办法,对于写少读多的情况确实很合适。也可以使用类似自旋锁的方式。

相关推荐

    Linux多线程服务端编程-使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Linux多线程服务端编程

    本书重点讲解多线程网络服务器的一种IO模 型, 即one loop per thread。 这是一种适应性较强的模型, 也是Linux下以 native语言编写用户态高性能网络程序最成熟的模式, 掌握之后可顺利 地开发各类常见的服务端网络...

    Linux多线程服务端编程:使用muduo C++网络库

    本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...

    Linux多线程服务端编程 陈硕

    本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。这是在 Linux 下以 native 语言编写用户态高...

    Linux多线程服务端编程-陈硕.pdf

    本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...

    Python多线程编程

    Python多线程编程文档说明 多进程编程 一、 multiprocessing 模块 1. multiprocessing 模块提供了多...forkserver 模式:在这种模式下,父进程派生了一个 server 进程。当任何时候,父进程需要创建子 进程时,由父进

    Java并发编程和多线程的区别

    并发编程是一种编程范式,它关注的是编写能够正确和高效处理多个并发任务的程序。并发编程不仅包括多线程,还包括了处理多个独立任务的各种技术和模式,如进程、协程、分布式编程等。并发编程的目标是实现任务的...

    《Linux多线程服务端编程:使用muduo C++网络库》.rar

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Qt中的多线程编程(二)

    QT通过三种形式提供了对线程的支持。...多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的。

    Linux多线程服务端编程:C++网络库

    本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...

    iOS高级程序员进阶——多线程编程核心技术模式篇

    多线程是一种软件实现多个线程并发执行任务的技术。在iOS开发中,实现多线程的的方式有很多种,常用的有pthread、NSThread、GCD与NSOperation。在实际应用中,多线程技术也有着非常多的使用场景,比如异步的网络请求...

    Qt中的多线程(一)

    QT中实现多线程编程的方法!...多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的。

    多线程操作窗口源码2012813

    多线程是一种提高程序运行效率和性能的常用技术。 随着我们学习工作的深入,在编程中或多或少会涉及到 需要多线程的情况。多数时候,我们的操作模式是后台 线程中处理数据,计算结果,然后在前台界面(GUI) 中更新...

    Qt多线程资料

    QT通过三种形式提供了对线程的支持。...多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的。

    C#多线程不阻塞

    后玩委托、 线程和异步调用的这么久,这是一种罪恶不分享我的智慧和知识对这个问题的一些因此希望,你 won�t 找一个 MSDN 文章在 1 AM 不知道为什么在你决定去到计算机。 我会尝试使用婴儿步骤和大量的 examples�...

    多线程操作窗口源码

    多线程是一种提高程序运行效率和性能的常用技术。 随着我们学习工作的深入,在编程中或多或少会涉及到 需要多线程的情况。多数时候,我们的操作模式是后台 线程中处理数据,计算结果,然后在前台界面(GUI) 中更新...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...

    NET面试题-多线程编程与线程同步1

    2. 为什么GUI不支持跨线程访问控件 3. 简述后台线程和前台线程的区别 4. 说说常用的锁,lock是一种什么样的锁 5. lock为什么要锁定一个参数,可

    delphi下socksvr控件多线程模式

    Delphi 6-2007 都支持的SocketServer控件的一种非常有效的多线程编程的Demo,找了很久找到一些资料,自己改写了以下.

    Linux系统编程之线程同步

    所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制。但,并没有强制限定。 因此,即使有了mutex,如果有线程不按规则来访问数据,依然会造成...

Global site tag (gtag.js) - Google Analytics