请问大量数据处理的操作在子线程还是在主线程里处理运行效率更高?最近想写一段程序,有个问题想咨询下大家,
请问大量数据处理的操作在子线程还是在主线程里处理运行效率更高?
最近想写一段程序,有个问题想咨询下大家,就是程序中开了很多的线程,每个线程都在不断的循环处理相应的数据(死循环),老师给我提供了一种思路是线程中只执行死循环和数据接收工作(数据是从CAN总线或者以太网传过来的),接收到数据后,从各个子线程中给主线程发送消息,主线程接收子线程传来的不同消息,在主线程中执行相应的数据处理工作。即子线程只负责while死循环不断从外部接收数据,所有的数据处理工作都交由主线程来实现。
我之前的想法是,数据接收和数据处理都直接在各个子线程中操作,主线程只负责打开子线程以及接收各个子线程处理后的数据,不负责数据处理的工作。
请问下大家,这两种处理方式哪种效率比较高一点,第一种处理方式,当有多个子线程同时传来不同消息,需要主线程相应不同处理函数的时候,会不会产生拥堵啊?请熟悉线程的大家帮我分析下,谢谢了!
[解决办法]
关键是接收和处理哪个更快。
子线程不要既接收又处理,应该分为接收线程和处理线程,根据接收和处理数据的速度情况分配数量,接收线程和处理线程通过待处理队列来交换信息。
最好做成自适应的,待处理队列增长到一定程度就增加处理线程,减少接收线程;队列缩减到一定程度就增加接收线程减少处理线程。
用多态来解决不同数据有不同处理的问题。
[解决办法]
主线程和子线程大家都是一样的线程,所以不存在主线程就有什么优势,而你自己的想法把大量的数据处理放在个个子线程,显然这样可以有效的并行,一般会更快。
