源文件之间功能的最佳划分

时间:2019-03-01 11:04:45

标签: c multithreading compilation linker

我的C程序有两个线程,两个线程都与两个外部接口交互。一个源文件的代码太多,因此我将其分成两部分。什么是正确的分割?

一个线程 MtoD 将消息从IPC消息队列中取出,进行处理,然后将命令发送到物理接口的驱动程序。另一个线程 DtoM 从该驱动程序接收中断,处理输入,然后将结果以消息形式发布到IPC队列。

将代码一分为二的明显方法是:

  • 按线程:两个源文件MtoD.c和DtoM.c,每个源文件都包含单个线程的所有功能-但两个文件都必须处理两个接口
  • 按接口:两个源文件M.c和D.c,每个文件都处理与某个外部接口有关的所有业务-但是线程贯穿这两个文件。

我的担忧是

  1. 代码维护。通过线程执行此操作可以更轻松地遵循线程的逻辑(无需在文件之间切换)。但是编写这种面向对象的人可能会将接口与IPC队列的接口包装在一个类中,该类放在一个文件中,而驱动程序接口在另一个类中,包装在另一个文件中。
  2. 性能。如果您有目标文件M.o和D.o,则每个文件只有一个外部库要处理-但是它们必须在线程执行期间相互调用。是否会产生任何开销(如果链接程序将它们变成了一个二进制文件)?如果您拥有MtoD.o和DtoM.o,则可以将大多数函数声明为static,这可能会启用更多的编译器优化。但是他们俩都需要与外部库的链接吗?

哪种方法最佳?

1 个答案:

答案 0 :(得分:0)

这是一个有趣的选择,您可能会推荐两个选项,这仅仅是因为两者都有优点和缺点,并且在很大程度上取决于一个人如何看待这些。

好,第三个选择:一个线程?如果我理解正确,可以将接口连接到IPC,因此,如果一个线程都对任一侧的输入都作出反应,然后将其发送到另一侧,则是否正确?我不认为您会以这种方式浪费很多响应时间,如果有的话,那么您将所有这些都放在一个地方。如果源太大,则可以查看可以自然地分离出哪些类,而不是分离成线程或接口。