当前位置: 技术问答>linux和unix
请大家看看这种情况使用多线程还是子进程好呢?
来源: 互联网 发布时间:2015-05-24
本文导语: 有8个串口,对每个串口都要采集数据,数据之间并无关系。然后把数据写往同一数据库。 本来俺是在windows下编程的,这种情况一般都用多线程解决。但是现在要把程序移植到linux下,才知道这边有子进程的概念,而...
有8个串口,对每个串口都要采集数据,数据之间并无关系。然后把数据写往同一数据库。
本来俺是在windows下编程的,这种情况一般都用多线程解决。但是现在要把程序移植到linux下,才知道这边有子进程的概念,而且用的不少。请大虾帮忙解释一下好吗?
还想请问一下如果8个串口公用IRQ,会不会出现问题,该怎么解决呢、?
多谢多谢!!
本来俺是在windows下编程的,这种情况一般都用多线程解决。但是现在要把程序移植到linux下,才知道这边有子进程的概念,而且用的不少。请大虾帮忙解释一下好吗?
还想请问一下如果8个串口公用IRQ,会不会出现问题,该怎么解决呢、?
多谢多谢!!
|
本来多线程和子进程就没有太大的区别,只是对数据、代码和堆栈的共享不太一样:
派生了线程,就和主进程共享数据和代码块,但它会拥有自己的堆栈空间;而子进程就会和主进程来共享上面的三个空间了。
所以在子进程里面改写数据的时候比较麻烦,需要改写地址而非直接改写值(这是我遇到的情况,不知道其他朋友怎样)。
如果是8个串口共用IRQ,那么处理程序会比较复杂吧,这得看是什么目的了:)
派生了线程,就和主进程共享数据和代码块,但它会拥有自己的堆栈空间;而子进程就会和主进程来共享上面的三个空间了。
所以在子进程里面改写数据的时候比较麻烦,需要改写地址而非直接改写值(这是我遇到的情况,不知道其他朋友怎样)。
如果是8个串口共用IRQ,那么处理程序会比较复杂吧,这得看是什么目的了:)
|
8个串口公用一个IRQ绝对可以,但是这个是硬件上面实现的,你的软件不用管。
还有,如果控制8各传口的话,你可以使用select或者poll,很好用,没必要是用进程和线程,
如果你非得使用,那么你用线程来写这个程序,还是很方便的。
还有,如果控制8各传口的话,你可以使用select或者poll,很好用,没必要是用进程和线程,
如果你非得使用,那么你用线程来写这个程序,还是很方便的。
|
你使用的应该是8口卡。如果是moxa的,现在的linux内核都支持
/usr/src/linux-2.4/Documentation/moxa-smartio是其说明
使用软件可以采用select进行,或者使用多线程(加入你有多个CPU的华)
/usr/src/linux-2.4/Documentation/moxa-smartio是其说明
使用软件可以采用select进行,或者使用多线程(加入你有多个CPU的华)
|
出于效率(操作串口)与资源(数据库)共享的考虑,不应用shell方法,shell多用于系统管理,系统工作调度(如备份、开关服务等)。
8个串口当然用线程。如果你的机器资源够多,用子进程方法编程比较容易,但系统资源(CPU、Momery)开销是线程的几十到上百倍。
8个串口当然用线程。如果你的机器资源够多,用子进程方法编程比较容易,但系统资源(CPU、Momery)开销是线程的几十到上百倍。