具有“内部”/“外部”守护程序线程的应用程序之间的功能差异

时间:2016-10-21 00:39:28

标签: python linux multithreading

具有3个守护程序线程的应用程序之间的线程操作功能是否存在差异,这些线程全部来自多处理队列 4个单独的应用程序:多处理队列/管道和3个守护程序线程应用程序从队列/管道应用程序读取

两种应用程序都不使用阻止/同步。在一天结束时,操作系统将决定何时允许线程运行以及运行多长时间。这里的功能是否存在其他差异,或者它们基本相同?

  

通用应用程序(无同步或阻止):

     
    
        
  • '股票市场Feed'队列:StockTrade消息(dictonaries)
  •     
  • 'TradingStrategy'1守护程序线程:从队列中拉出,检查消息并执行交易
  •     
  • 'TradingStrategy'1守护程序线程:从队列中拉出,检查消息并执行交易
  •     
  • 'TradingStrategy'1守护程序线程:从队列中拉出,检查消息并执行交易
  •     
  

备用架构:

  

Feed应用程序(无多线程):

     
    
        
  • '股票市场Feed'队列或管道:StockTrade消息(dictonaries)。是否可以从另一个外部进程访问队列?我知道命名管道可以排队吗?
  •     
  
     

交易申请(无多线程):

     
    
        
  • 'TradingStrategy':与Feed(管道?/队列)交互,检查消息并执行交易
  •     
  
     

交易申请(无多线程):

     
    
        
  • 'TradingStrategy':与Feed(管道?/队列)交互,检查消息并执行交易
  •     
  
     

交易申请(无多线程):

     
    
        
  • 'TradingStrategy':与Feed(管道?/队列)交互,检查消息并执行交易
  •     
  

1 个答案:

答案 0 :(得分:1)

是的,这两个选项完全不同。但它很快就试图解释其中的差异。您应该研究并阅读线程和进程之间的差异。首先直截了当。

现在,根据您的具体情况,假设通过"多处理队列"你实际上是指一个进程的一个线程中的一个python Queue实例,因为队列在与所有工作线程相同的进程内,工作人员将能够访问并共享同一个Queue实例。

但是,当工作者都是单独的进程时,他们无法通过共享内存访问队列,并且需要某种形式的进程间通信才能访问该队列。

在实践中,我会想到rediszeromq之类的东西作为你的队列,然后建立一个python程序来与它交谈,然后扩展为少数,或者尽可能多的它的副本,如你所知。