这样的应用可以实现吗?关于通信和多线程的。
背景:一函数M,功能是向远程socket server发送一请求包,等收到server的返回包时,从中解析出信息后返回,调用它的函数可能会把收到的信息打到界面上或写入数据库中,或什么的,那我就不管了,我就负责实现这个函数。函数用户大概会这样用我的函数M:
while(has_data())
{
gen_para(&c); //准备请求参数;
char *temp = M(c);
use_data(temp); //使用收到的信息
}
问题:发现此函数从发出请求到收到返回包平均需要100多毫秒,也就是说,每秒平均能从server得到10次信息,这不能满足高峰期瞬时通信量的需要。不过,经分析发现,server端从收到请求包到发返回包所用的时间极短(只几个毫秒),因此判断大量时间耗费在数据包的网络慢游上了。
回忆起网络课上老师讲滑动窗口流量控制时说过,这种情况提高通信效率的办法是客户端不停的发请求而不等回复,最好发到把信道塞满,这样服务端取第一个请求,处理,发回复后,正好第二个请求也到了,两样处理完后,每三个请求也到了...,这样当请求数无穷多时,实际上信息交换的速度等于server产生回复的速度,那是相当令人满意的速度了。
但是,几经考虑还是不知这种东西如何实现,不知高手们有何高见?感觉是要用多线程,开上一堆线程,让它们等回复不就行了。可是M函数要等到子线程收到回复才有东西返回给调用它的函数啊,也就是说M要等子线程收到回复才能返回,哎,不对,怎么又绕回问题起点了?不是为了不等回复呢才开的多线程吗,怎么又等上了?这怎么能提高效率呢?!