我需要为家庭自动化项目编写一个程序,该项目将在运行Ubuntu12.04的Beagle上运行。以下是该方案的功能:
我已实施上述功能,详情如下:
我的问题是:
发布于 2012-06-23 10:52:59
这种生成多线程的编程方法是一种很好的编程方法吗?当考虑到它运行在一个具有1 1GhZ 7核的嵌入式平台上时,它是一个很好的编程方法吗?
您已经说过,您目前有三个线程:串口的侦听器线程、数据库管理线程和TCP/IP线程。
这里的答案是,它实际上取决于您想要挤出硬件的性能。每个线程消耗多少CPU资源?
在我看来,线程简化了软件的设计和外观(在大多数情况下)。然而,它们的代价是:
如果您不打算接近该平台的性能极限,那么我的猜测是,您现在应该可以使用三个线程。
有更好的方法吗?
这与你以前的问题有很大的关系。我不熟悉项目的瓶颈和约束。也许有几个,也许根本就没有,所以很难说是否有更好的方法去做。这也取决于你真正想要达到的目标。当然,也有其他的方法。
例如,可以实现多个进程,而不是多个线程。多处理有它自己的一组赞成与反对
你能告诉我一种方法吗?这样我就可以同时通过串口读写了。是否需要再次将读和写功能放在单独的线程中才能做到这一点?
可以将串行通信线程实现为一个处理读写(读取数据块、写入数据块、读取数据块、写入数据块等)的平面while(1)
旋转循环。
尽管如此,我认为将串行通信线程分成两个单独的线程(Rx和Tx)是有效的(也是正确的)建议。我参与过许多项目,这些项目就是这样实现的,而且随着串行协议变得更加复杂,它通常证明是有益的。
我不明白的是,您的串口是USB还是RS-232。
不管怎样,我希望我的回答能证明我的回答是有帮助的和有洞察力的。祝好运。
发布于 2012-06-23 11:09:11
多个线程的替代方案是多个状态机。
多个状态机背后的理论是,单个线程轮询多个状态机,因此每次对状态机的调用都必须“运行到完成”并尽快返回。
状态机比多个线程更容易测试和调试。
这确实意味着它总是消耗一个核心的100%的时间,除非轮询循环可以睡眠一段时间。
因此,您可以为每个RS232读取、RS232写入、DB访问和TCP轮询设置一个状态机。
此外,这并不妨碍您有其他线程为您的程序的其他部分,或实际上其他程序运行。
https://stackoverflow.com/questions/11168167
复制相似问题