首页 > 解决方案 > 源文件之间的最佳功能划分

问题描述

我的 C 程序有两个线程,它们都与两个外部接口交互。一个源文件的代码太多,所以我将它一分为二。什么是正确的分裂?

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

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

我的担忧是

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

哪种方式是最优的?

标签: cmultithreadingcompilationlinker

解决方案


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

好的,第三个选项:一个线程?如果我猜对了,您将接口连接到 IPC,那么如果一个线程同时对任一侧的输入做出反应并将其发送到另一侧?我认为您不会以这种方式浪费太多的响应时间,如果有的话,并且您将所有这些都集中在一个地方。如果源太大,您可以查看可以自然分离的类,而不是分离成线程或接口。


推荐阅读