小编pol*_*ath的帖子

如何在 Common Lisp 中同时运行多个阻塞循环。[将 cl-async 与线程池中的队列结合起来]

我是编程的新手,也是 Common Lisp 的新手。我正在尝试解决以下问题:

有流源(S1、S2、S3)、两个处理器(P1、P2)(处理器不是指 CPU 处理器,而是处理功能/子系统)和四个流目的地(D1、D2、D3、 D4)。通过流,我的意思是数据连续出现,但可能是间歇性的。所以读/写操作可能会阻塞。来自流的数据需要聚合,然后根据它们是什么,由处理器之一进行处理。每个处理器(从其输入聚合)产生四种子聚合,然后将这些子聚合发送到上述四个目的地之一。

我对这个问题的伪代码是这样的:

三个循环,S1、S2、S3 各一个,用于数据聚合和调度。对于特定来源(例如 S2),伪代码是:

 loop-2 : read from S2,
            when sufficient data aggregate, 
                if aggregate is kind-1 send to P1 
                  else send to P2.
Run Code Online (Sandbox Code Playgroud)

两个循环,每个循环一个用于 P1、P2,用于处理和解聚合。对于特定的处理器(比如 P1),伪代码是:

In a loop for P1:   take aggregate of kind-1,
                       process it to produce one or some of four sub-aggregates.
                          case: sub-aggregate 1 -> serialize and send/write to D1,
                                sub-aggregate 2 -> serialize and send/write to D2,
                                sub-aggregate 3 -> serialize and send/write to D3,
                                sub-aggregate …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading common-lisp event-loop green-threads

5
推荐指数
0
解决办法
367
查看次数