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

标签 linux multithreading unix process pipe

linux 系统,两个 rs485 端口,这两个端口连接了大约 50 个设备。 系统中约有 100 个来自 linux 本身的进程。 4 核心臂。 在很多意义上,它就像一个运行着我们应用程序的 Linux 桌面。 可能会变得很忙,例如就像您在 Linux 中打开办公室的那一刻。

  1. 最初的设计是这样的,也经过测试, 主应用程序本身有 10 个线程。 对于每个 rs485,主进程产生一个进程来监视所有 这个设备 港口。 (因为这是串行总线,它基本上是一个 for 循环执行 tx/rx 到 每个设备 1 乘 1。我们在两个 rs485 进程中没有锁。) 所以总共3个过程。 每个 rs485 进程不相互交谈,它们只与 main 交谈 通过命名管道处理。

  2. 现在有人要我改用线程。所以只有1个进程,12个线程。 那个 rs485 线程毫 headless 绪地崩溃了,没有核心文件。 人们一遍又一遍地查看代码,仍然一无所知。

他们不想返回流程,因为 1. 3 个同名进程令人困惑。 2.我们不知道如何将gdb附加到进程进行调试。如果只有 1 过程,更容易。

如果你们能帮我解决这些问题

Q1:我想我们可以更改流程名称,对吧? 或为每个进程创建 pid 文件,我是新手。

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

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

Q3:为什么一个线程没有核心文件就可以死掉,而主进程/线程可以 总是生成代码文件?

Q4:如果在这种情况下使用线程而不是进程,有什么好处? (在我看来,只会带来麻烦。)

Q5:命名管道通过线程还是进程,性能差别大吗?

非常非常感谢!

最佳答案

开发多线程应用程序要困难得多,对于您的团队来说可能还为时过早。回到单独的流程方法。

1)什么?

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

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

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

关于Linux:在这种情况下我应该使用进程还是线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23172908/

相关文章:

linux - 使用awk格式化没有制表符的ls输出?

linux - 如何从 Linux 命令行调用 MATLAB 函数?

c# - 无法从另一个线程访问对象

另一个线程正在运行时,JavaFX UI 被阻塞

c++ - 不同步的多线程中的变量访问

linux - 通过 ssh 远程执行命令不起作用

linux - 在 Linux 操作系统下使用 FASM 使用 XMM 寄存器进行求和

linux - 如何从 .NET Core 控制台应用程序创建 Linux 守护进程?

c - 关于 pthread_cond_signal 和 pthread_cond_wait

bash - 使用带有 'rename' 的通配符