Linux:在这种情况下我应该使用进程还是线程?

时间:2014-04-19 17:01:05

标签: linux multithreading unix process pipe

linux系统,两个rs485端口,这两个端口连接~50台设备。 来自linux本身的系统中有大约100个进程。 4个核心臂。 从很多方面来说,它就像是运行我们应用程序的Linux桌面。 可能会很忙,例如就像你在linux上开办公室一样。

  1. 原创设计是这样的,也经过充分测试, 主应用程序有10个线程。 对于每个rs485,主进程产生一个监视所有进程的进程 这个设备 港口。 (由于这是串行总线,它基本上是一个执行tx / rx的for循环 每个设备1乘1.我们没有锁定两个rs485进程。) 总共3个过程。 每个rs485进程都没有相互通信,它们只与main通信 通过命名管道进行处理

  2. 现在ppl要求我更改为使用线程。所以只有1个进程,12个线程。 有了这个rs485线程崩溃没有线索,没有核心文件。 Ppl一次又一次地看着代码,仍然一无所知。

  3. 他们不想回去处理,因为 1.具有相同名称的3个进程令人困惑。 2.我们不知道如何将gdb附加到要调试的进程。如果只有1 过程,它更容易。

    如果你们可以帮助我这些

    Q1:我认为我们可以更改流程名称,对吗?     或为每个流程创建pid文件,我不熟悉这些文件。

    Q2:如果你有3个同名的进程,调试有多难?     特别是我想调试子进程,     如何在gdb中执行此操作?     我可以在代码中设置断点,说这是child,在fork()之后?

    如果我在fork()之后更改子进程名称会发生​​什么,我该如何调试子进程?

    问题3:为什么线程可以在没有核心文件的情况下死掉,而主进程/线程可以 总是生成代码文件?

    问题4:如果在这种情况下使用线程而不是进程,你会得到什么?     (在我看来,只会遇到麻烦。)

    Q5:通过线程或进程命名管道,性能差异很大?

    非常感谢!

2 个答案:

答案 0 :(得分:0)

开发多线程应用程序要困难得多,可能是你团队的早期开发。回到单独的流程方法。

1)什么?

2)通过pid将gdb附加到正在运行的进程

3)你可以直接在线程,共享内存之间传递数据

4)命名管道在两种情况下都很慢,不需要带线程

答案 1 :(得分:0)

Q1 - 进程名称只是可执行文件的名称。你可能不想改变它。您可以跟踪pid文件中每个实例的pid。

Q2 - 在不同的进程中处理事情应该使调试更容易,因为它减少了潜在的交互。请注意,这是一个非常主观的意见。 Gdb可以使用命令行选项将pid附加到。

第三季 - 这将取决于为什么事情正在消亡。除非您正在使用信号处理程序,否则Seg故障和类似情况应导致两者都终止。

Q4 - 当有大量的活动间通信或同步或大量的创建/破坏时,线程往往更有效率。

第五季 - 不明白为什么会有任何重大差异。在一种情况下,图片的某些部分会更快,但我希望最终结果是收支平衡。

编辑:正如Basilevs建议的那样 - 回到流程。它们更容易使用,并且让它们以前工作过。