关于线程中的SLEEP ( 积分: 100 )

  • 主题发起人 主题发起人 iceiceberg
  • 开始时间 开始时间
I

iceiceberg

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编写一个TFTP Server.每个请求来时新建一个thread,其中含有一个idUdpServer.
线程的execute下使用了一个死循环。为了能使CPU占用率降一点,使用了sleep(100)。
现在我的疑问是,sleep的时候,如果这时客户端发来一个包,idUdpServer会收到这个包吗?它能处理这个包吗?
理论上感觉不行,可是实验时传文件还挺成功的……
请指教~
 
我在编写一个TFTP Server.每个请求来时新建一个thread,其中含有一个idUdpServer.
线程的execute下使用了一个死循环。为了能使CPU占用率降一点,使用了sleep(100)。
现在我的疑问是,sleep的时候,如果这时客户端发来一个包,idUdpServer会收到这个包吗?它能处理这个包吗?
理论上感觉不行,可是实验时传文件还挺成功的……
请指教~
 
收到这个数据包,在本地也有一个保存时间的,如果你sleep太大了,那肯定要丢失,windows对网络来的数据包不是一接收到就处理,达不到这个水准,也没有必要,都是保存下来,然后按照一定的机制进行分析获取.100ms不是一个很大的时间,但是你这个只是因为连接你的服务器的人少了,如果有300人连接,情况如何?就是你不sleep,你的电脑也会忙于这些处理,而占用大量的cpu时间.当然这个根据应用的实际情况来考虑.
 
ftp用的是tcp,每个数据包都有生存时间,就算在生存时间之内你没有处理,tcp也会保证重传这个数据包,所以不管你sleep多久你都能处理这个数据包
 
to 迷糊:
是TFTP(Trival FTP),所以是用UDP实现的
 
那么调整线程的优先级能否降低CPU占用率呢?
 
sleep一般是要用的,或者用WaitForSingleObject等函数。
不过根本没必要sleep(100)这么久,对于cpu来说,1毫秒的时间已经够长了
sleep(1)就可以了
udp用阻塞模式的话,当有包来时才会执行,所以没必要用到sleep
用非阻塞模式的话,可以用select,可以用WaitForSingleObject等待,有包时通知线程执行也可以。
所以
 
谢谢各位,结贴了:)
 
后退
顶部