参考58沈剑大神架构师之路上的文章,谈谈Leader-Follower线程模型:

  上图就是L/F多线程模型的状态变迁点,共6个关键点:

(1)线程有3种状态:领导leading,处理processing,追随following

(2)假设共N个线程,其中只有1个leading线程(等待任务),x个processing线程(处理),余下有N-1-x个following线程(空闲)

(3)有一把锁,谁抢到就是leading

(4)事件/任务来到时,leading线程会对其进行处理,从而转化为processing状态,处理完成之后,又转变为following

(5)丢失leading后,following会尝试抢锁,抢到则变为leading,否则保持following

(6)following不干事,就是抢锁,力图成为leading

  优点:不需要消息队列

  适用场景:线程能够很快的完成工作任务

  有人说并发量大时,L/F的锁容易成为系统瓶颈,需要引入一个消息队列解决。这种观点不对,一个消息队列,其仍是临界资源,仍需要一把锁来保持互斥,只是锁竞争从leading移到了消息队列上,此时消息队列仅仅只能起到消息缓冲的作用。

  根本解决方案是降低锁力度(例如多个队列)

最新文章

  1. Vim使用
  2. Objective-c快速入门
  3. FFT时域与频域的关系,以及采样速率与采样点的影响
  4. android 入门-Service实时向Activity通过BroadcastReceiver传递数据
  5. JStorm之Nimbus简介
  6. 设计模式——"simple Factory"
  7. ORACLE中创建和删除临时表
  8. mybatis0212 mybatis逆向工程 (MyBatis Generator)
  9. MacBook Pro 的照相机在哪?
  10. Android高效的应用程序开发工具集1---ant构建一个简单的Android工程
  11. 简单的shared_ptr实现
  12. 虚幻引擎UE4如何制作可拖动(Drag and Drop)的背包(Scrollbox)
  13. jdk1.8使用的url和driverName的改变
  14. Java虚拟机1
  15. 深入字节码理解invokeSuper无限循环的原因
  16. JavaScript学习总结(五)——jQuery插件开发与发布
  17. 浅析arm的异常、中断和arm工作模式的联系
  18. ORA-10618: Operation not allowed on this segment 执行存储过程权限需声明
  19. Linux下开发python django程序(django数据库多对多关系)
  20. jquery 直接访问图片路径

热门文章

  1. map全局缓存demo
  2. Java中lambda表达式详解
  3. AndroidStudio使用genymotion模拟器
  4. c语言进阶4-有返回值函数
  5. django中ORM的model对象和querryset 简单解析
  6. .NET开发框架(八)-服务器集群之网络负载平衡演示(视频)
  7. spring-boot-plus后台快速开发脚手架之代码生成器使用
  8. GoLang fsnotify 实现目录中日志文件大小监控
  9. STL 大法好
  10. SpringBoot Jar包瘦身 - 跟大文件说再见!