当前位置: 技术问答>linux和unix
请教优化算法减少CPU处理时间
来源: 互联网 发布时间:2015-05-01
本文导语: 在Sco Unix 5.05,Ansi C 现在有一个程序,单进程模拟多任务,就是一个while(true)循环。在此循环中,需要接收N个TCP连接数据,还需要接收N多个Udp数据。现在我们的处理是先接收tcp数据,处理完后,大概需要2~5s,然...
在Sco Unix 5.05,Ansi C
现在有一个程序,单进程模拟多任务,就是一个while(true)循环。在此循环中,需要接收N个TCP连接数据,还需要接收N多个Udp数据。现在我们的处理是先接收tcp数据,处理完后,大概需要2~5s,然后接收UDP数据,处理完毕后,使用一个Wait函数,使程序睡眠规定的时间,该函数在超时或者有UDP数据到达时唤醒,进而进行循环。
然而,这么处理,很明显的将导致数据丢失。因为有可能在wait的时候,没有UDP数据过来,却有tcp数据。并且是大量的涌来。等到接收时,已经使接收缓冲区漫了。
我们一直没有想到方法。请教各位老大,有什么好的方法吗?
现在有一个程序,单进程模拟多任务,就是一个while(true)循环。在此循环中,需要接收N个TCP连接数据,还需要接收N多个Udp数据。现在我们的处理是先接收tcp数据,处理完后,大概需要2~5s,然后接收UDP数据,处理完毕后,使用一个Wait函数,使程序睡眠规定的时间,该函数在超时或者有UDP数据到达时唤醒,进而进行循环。
然而,这么处理,很明显的将导致数据丢失。因为有可能在wait的时候,没有UDP数据过来,却有tcp数据。并且是大量的涌来。等到接收时,已经使接收缓冲区漫了。
我们一直没有想到方法。请教各位老大,有什么好的方法吗?
|
ls是指what?
如果你改成
将fd改成非阻塞,
select(fd, rsets, wsets, ...) -->continue;
同时 -->fork(), child_pid-->读取数据库 ;
效果会好的多;
别偷懒,对付多数据应用,fork(),pthread是最好的选择
如果你改成
将fd改成非阻塞,
select(fd, rsets, wsets, ...) -->continue;
同时 -->fork(), child_pid-->读取数据库 ;
效果会好的多;
别偷懒,对付多数据应用,fork(),pthread是最好的选择
|
为什么不用多进程或多线程
|
没使用select()?
|
用select 或 是使用非阻塞读,中间用nap等待。
|
将不同任务分离开来,将使代码更清晰;
而同步的多少,是和业务及设计两方面相关的。
而同步的多少,是和业务及设计两方面相关的。
|
动态分配缓冲,用固定的指针指向这个缓冲。不知道可否