C 如何避免一个任务去做耗时的处理?

C 如何避免一个任务去做耗时的处理?,c,linux,multithreading,sockets,software-design,C,Linux,Multithreading,Sockets,Software Design,我有一个旧的嵌入式系统模型,具有linux线程-1进程。每个线程或任务都通过发布事件相互通信。发布事件后,线程从sockbuffer读取数据。有时,这些数据可能太多。因此,任务将忙于读取该缓冲区。此外,还有一项特殊任务——将整个用户输入历史记录记录到RAM磁盘文件中。但是,只有一个用户单击“保存”按钮,此操作才会生效 条件-我们无法控制要处理的数据量。这可能很小,也可能太大。其次,这是一个嵌入式系统,因此我们通过检查任务是否能够拍拍看门狗来不断检查运行状况 观察- 如果数据太多,则sock缓冲区

我有一个旧的嵌入式系统模型,具有linux线程-1进程。每个线程或任务都通过发布事件相互通信。发布事件后,线程从sockbuffer读取数据。有时,这些数据可能太多。因此,任务将忙于读取该缓冲区。此外,还有一项特殊任务——将整个用户输入历史记录记录到RAM磁盘文件中。但是,只有一个用户单击“保存”按钮,此操作才会生效

条件-我们无法控制要处理的数据量。这可能很小,也可能太大。其次,这是一个嵌入式系统,因此我们通过检查任务是否能够拍拍看门狗来不断检查运行状况

观察-

  • 如果数据太多,则sock缓冲区读取将需要一些时间。因此,它可能会导致其他任务耗尽,从而导致崩溃

  • 如果用户历史记录太多,那么即使在ram磁盘上写入整个历史记录(最大值)也会消耗时间。因此,所有这些都会导致其他任务无法完成,即无法轻拍wd。因此,它将导致崩溃

  • 问题-我不能重新设计这个软件,因为它已经过时了。只是,我可以做一些手术或智能代码来避免这些问题。解决这些设计问题的最佳方法是什么


    ->我用的是C,Linux

    你所说的
    linux线程-1进程是什么意思?它们是否将POSIX线程映射到与单个用户空间进程关联的单个内核线程?因此,它们实际上是用户级线程,仅在用户空间中调度。在这种情况下,由其中一个线程执行的任何系统调用都会阻止所有线程,直到它返回。与其让线程
    read(ALOT)
    ,不如让它
    ,而(!done){read(一点点);sleep(0);}
    ?是的-不了解它是如何安排的。通常情况下,我会建议降低记录器线程的优先级,但根据您的设计,我不确定这是否可行。而且,这也是如此。我们在这里不拍看门狗,而是踢它们:)看门狗在多线程系统中的作用本身就有点可疑。每秒被某个空闲线程踢出的硬件看门狗仍然可以检测全部故障,但以看门狗的方式监视每个线程的用处要小得多。