• 几种多线程编程模型的比较


    http://blog.csdn.net/muclenerd/article/details/41869073

    几种模型的特点

    工作组模型
    1.多个worker共享一个数据队列,所以每次dequeue时要先检查队列是否为空。不为空才能的返回消息。
    2.enqueue可以不用关心队列消息数,只需要enqueue然后通知线程即可。
    3.示例中,条件变量condDone是可选的。某些情况下需要知晓队列是否为空的状态,可以考虑增加这个条件变量并编写接口。


    C/S模型
    1.只有一个线程处理消息,然后再把处理后的消息通过客户端的消息队列同客户端交互。


    流水线模型
    1.流水线有很多节点,后面的节点阻塞会导致前面的节点阻塞。前面的节点是否阻塞并不影响后面节点的工作。队列尾部和头部可以同时读写。这跟现实中时一样的。
    2.流水线为了实现严格的执行顺序,每个节点的数据结构构成了消息队列的一环,并且一定要有信号量和条件变量来控制执行顺序。

    各个编程模型的作用

    流水线模型主要用来严格控制线程的执行顺序。工作组模型可以用来提高消息的处理处理速度。C/S模型主要用来提供多线程交互的架构。实际编程中,这几种是一起混着用的。

    各个编程模型的区别

    流水线模型里,每个线程干的活是不一样的。
    工作组模型里,所有的线程都可以从队列尾部取出消息进行处理,所有线程的实现逻辑都是一样的。
    客户/服务器模型里,用于处理消息的线程只有一个。为了提高并发度,可以采用工作组的模式来处理消息。C/S多线程模型的关键是,服务器必须要等到客户端的命令后才能工作,而且处理完消息后可能会同客户端进行交互。所以在实现中,服务器端和客户端都要拥有自己独立的消息队列。

    多线程编程的关键在于确定多个线程之间的架构,并根据架构构建数据(消息)在线程之间的流通通道。

  • 相关阅读:
    动态规划-数字三角形V1
    二分-Aggressive cows
    Unity中的UGUI之UGUI的渲染顺序--01
    关于C#中委托的学习笔记
    Unity中的协程用法以及注意事项
    Unity中的单例方法2
    Unity中关于射线的运用——第03节 射线的实际运用
    Unity中关于射线的运用——第02节 圆形射线
    Unity中关于射线的运用——第01节 线段射线
    算法之折半查找
  • 原文地址:https://www.cnblogs.com/feng9exe/p/6758369.html
Copyright © 2020-2023  润新知