gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:40 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com