随笔分类 -  并发

摘要:本文摘要了《Java多线程设计模式》一书中提及的 Single Threaded Execution 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 避免因多个线程同时访问一个共享数据而破坏数据的完整性。 ◆ 解决 阅读全文
posted @ 2025-02-28 20:53 green-cnblogs 阅读(3) 评论(0) 推荐(0) 编辑
摘要:本文中,笔者尝试组合了非阻塞式和阻塞式的队列,成为新的组合式线程池。线程池有一个共享任务队列,每个工作线程各有一个工作任务队列。线程池用户提交的任务,先被保存在共享任务队列中。线程池的调度器线程将共享任务队列中的任务分派给工作线程的工作任务队列,工作线程从工作任务队列中获取任务并执行。 【注】图中 阅读全文
posted @ 2022-01-10 14:16 green-cnblogs 阅读(369) 评论(0) 推荐(1) 编辑
摘要:笔者根据 Anthony Williams 在《C++并发编程实战》中所述, 某个工作线程在任务队列的头部操作,而其它工作线程在任务队列的尾部操作。这实际上意味着这个队列对于拥有线程来说是一个后进先出的栈。最近被放到队列中的任务会最先被取出来执行。从缓存的角度来说这可以提高性能,因为对比之前被放入队 阅读全文
posted @ 2021-12-29 15:20 green-cnblogs 阅读(387) 评论(0) 推荐(0) 编辑
摘要:本文中,笔者为 《简单的线程池(四)》 提及的非阻塞独占式线程池增加了一项功能:当某个工作线程的任务队列中无工作任务时,此工作线程可以去其他工作线程的任务队列中获取任务。笔者称之为非阻塞互助式线程池。 笔者对比了测试结果与 《简单的线程池(六)》 的数据,得出了添加功能前后的差异。 本文不再赘诉与 阅读全文
posted @ 2021-12-23 21:02 green-cnblogs 阅读(270) 评论(0) 推荐(0) 编辑
摘要:本文汇总了 《简单的线程池(三)》、《简单的线程池(四)》、《简单的线程池(五)》 中的测试数据,并在此基础上对比了 非阻塞共享式、阻塞共享式、非阻塞独占式、阻塞独占式 这四个线程池的吞吐量指标。笔者对结果进行了分析,给出笔者的结论。如对测试方案、概念等有不明之处,请参考该博文。 【注】非阻塞共享式 阅读全文
posted @ 2021-12-17 16:18 green-cnblogs 阅读(307) 评论(0) 推荐(0) 编辑
摘要:笔者在 《简单的线程池(四)》 中采用了非阻塞的(nonblocking)线程同步方式,在此文中笔者将采用阻塞的(blocking)线程同步方式(参考 《简单的线程池(二)》) 实现相同特性的线程池。 本文不再赘述与 《简单的线程池(二)》、《简单的线程池(四)》 相同的内容。如有不明之处,请参考该 阅读全文
posted @ 2021-12-14 13:15 green-cnblogs 阅读(134) 评论(0) 推荐(0) 编辑
摘要:笔者对 《简单的线程池(一)》 中的非阻塞式线程池进行了改造。在新的线程池中,为每个工作线程配备一个独占的任务队列。线程池用户提交的任务被随机地分配到各个独占的任务队列中。工作线程从独占的任务队列中获取任务并执行。 本文不再赘述与 《简单的线程池(一)》 相同的内容。如有不明之处,请参考该博客。 ◆ 阅读全文
posted @ 2021-12-13 11:24 green-cnblogs 阅读(461) 评论(0) 推荐(0) 编辑
摘要:本文中,作者针对 《简单的线程池(一)》 和 《简单的线程池(二)》 介绍的两个线程池分别进行了并发测试。基于收集的测试数据,笔者对结果进行了分析,给出笔者的结论。 ◆ 目的 本测试是为了确认非阻塞式线程池与阻塞式线程池的生存性,以及两者在吞吐量上的差异,为改进线程池提供数据支撑。 【注】这里的差异 阅读全文
posted @ 2021-12-08 10:27 green-cnblogs 阅读(449) 评论(0) 推荐(0) 编辑
摘要:笔者在 《简单的线程池(一)》 中采用了非阻塞的(nonblocking)线程同步方式,在此文中笔者将采用阻塞的(blocking)线程同步方式实现相同特性的线程池。 本文中不再赘述与 《简单的线程池(一)》 相同的内容。如有不明之处,请参考该博客。 ◆ 实现 以下代码给出了此线程池的实现,(blo 阅读全文
posted @ 2021-11-30 15:02 green-cnblogs 阅读(467) 评论(0) 推荐(0) 编辑
摘要:本文给出了一个线程池的实现方案和内部逻辑,并对其进行了验证。 此线程池拥有一个被所有工作线程共享的任务队列。线程池用户提交的任务,被线程池保存在任务队列中,工作线程从任务队列中获取任务并执行。 任务是可拥有返回值的、无参数的可调用(callable)对象,或者是经 std::bind 绑定了可调用对 阅读全文
posted @ 2021-11-25 14:13 green-cnblogs 阅读(726) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示