求教一个多线程设计方案


想做一个关于服务器程序,涉及收发消息和读写文件。计划用三线程来实现,三线程说明如下:
1. 主线程:负责接收消息,以及逻辑处理,进行读文件和写文件。由于读写文件非常耗时,避免卡死所以分给子线程来做。
2. 读线程:负责读文件。
3. 写线程:负责写文件。

然后问题就来了,主线程读完文件之后,不是只为读而读,读完还要做处理。但是,该方案中读文件是给读线程做的,主线程难道要不断等待,等读线程读完了才继续执行下去?这样的话就跟单线程没有区别了。

写文件也一样,写时发生错误的话,主线程还是有后续操作的,难道又是等待?


于是,我想用触发的方式来解决。即读完文件后,由读线程来触发主线程未完成的操作。这样问题是解决了,但程序架构会很散,很累赘,不知道好不好。

所以,求教一下大家,有没有什么好的方案,既能避免主线程因读写文件而卡很久,又能有好的程序架构,而且看起来专业。
或者有什么资料可以参考一下?

12 个解决方案

#1


读写放入子线程中,处理可以在主线程中,也可以还在子线程中。主线程和子线程通过事件、标志等通信。

#2


这样不行吗?一个线程读,一个线程写....你主线程该干嘛干嘛...

#3


主线程只负责接收消息,具体的处理都交给某一个线程来做,可以开多个线程同时处理多个客户请求。

#4


利用自定义消息,主线程把工作交给子线程然后继续工作。读线程读完后发消息给主线程。主线程收到后处理,完成后继续工作。读和写互斥。

#5


主线程只负责消息的收发和任务的安排,具体工作交给读写线程来处理
线程之间可以用消息,也可以用全局变量来交换数据

#6


你自己的设计还行了,你先把它实现了, 再考虑优化

#7


谢谢楼上几位, 说得有道理, 确实可以让主线程只负责消息, 具体工作交给线程来做.

不过估计细节上还会有问题, 先不管, 做了再说.

#8



如果消息来的快,可以考虑有一个消息队列,之后让主线程循环的到队列中拿消息,当然是在子线程完成一个消息再通知主线程。

#9


引用 1 楼 wizardk 的回复:
读写放入子线程中,处理可以在主线程中,也可以还在子线程中。主线程和子线程通过事件、标志等通信。

顶.
读写处理放到子线程,主线程只做接收.用事件通信

#10


可以这样设计:
首先有两个栈,读、写,这两个栈用来存放要读写文件的相关信息。
有一个线程用来接收网络上的消息,并把消息分成读、写,当是读消息时,把要读的相关信息压入读栈,如果是写文件信息,就把要写入文件的相关信息压入写栈。
有一个读线程,一个写线程。
读线程循环的从读栈中取消息(pop),取出一条处理一条。
写线程循环的从写栈中取消息(pop),取出一条处理一条。
压栈和出栈的时候,要有同步处理过程,因为你要压栈,又要从栈中取出一条并删除,是互斥的。

#11


引用 10 楼 zxdyu2009 的回复:
可以这样设计:
首先有两个栈,读、写,这两个栈用来存放要读写文件的相关信息。
有一个线程用来接收网络上的消息,并把消息分成读、写,当是读消息时,把要读的相关信息压入读栈,如果是写文件信息,就把要写入文件的相关信息压入写栈。
有一个读线程,一个写线程。
读线程循环的从读栈中取消息(pop),取出一条处理一条。
写线程循环的从写栈中取消息(pop),取出一条处理一条。
压栈和出栈的时候,要……


虽然你没理解我的意思,但还是谢谢你. 以及我已经通过楼上几位找到比较好的方案了.

#12


引用 11 楼 san_77227487 的回复:
引用 10 楼 zxdyu2009 的回复:
可以这样设计:
首先有两个栈,读、写,这两个栈用来存放要读写文件的相关信息。
有一个线程用来接收网络上的消息,并把消息分成读、写,当是读消息时,把要读的相关信息压入读栈,如果是写文件信息,就把要写入文件的相关信息压入写栈。
有一个读线程,一个写线程。
读线程循环的从读栈中取消息(pop),取出一条处理一条。
写线程循环的从写栈中取消息(p……

找到好的方案就行了,不过我写的你为什么看不懂呢?我们可以交流,相互学习。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2019 ITdaan.com

赞助商广告