当前位置: 技术问答>linux和unix
用户态代码性能提高的问题,如何让出CPU利用率??
来源: 互联网 发布时间:2016-11-22
本文导语: 现在有个linux用户态的while(1)循环程序,这个程序的作用就是不停的check内存里面看有没有过来的数据,有的话就收。现在的问题就是不管有没有来的信息他都会一直while导致CPU利用率100%,我的解决方法是在循环里...
现在有个linux用户态的while(1)循环程序,这个程序的作用就是不停的check内存里面看有没有过来的数据,有的话就收。现在的问题就是不管有没有来的信息他都会一直while导致CPU利用率100%,我的解决方法是在循环里插入u/nanao sleep或者select在信息过来比较慢的时候降低while的频率,这种做法可行吗?会不会影响到收数据的性能?有什么其他可行的方法吗?
另外我还想到是否存在一种可以限制某个进程或者线程的CPU使用率的函数,加在循环里就可以限制当前进程CPU的使用率,达到的效果应该和sleep是一样的,有这种机制吗??大家有啥建议???
谢谢大家帮助。:D
另外我还想到是否存在一种可以限制某个进程或者线程的CPU使用率的函数,加在循环里就可以限制当前进程CPU的使用率,达到的效果应该和sleep是一样的,有这种机制吗??大家有啥建议???
谢谢大家帮助。:D
|
没明白你所说的“用户态程序在大数据量情况下使用系统调用的话性能就不好了”
多大的数据量算大?webserver神马的都是用select实现的,他们的数据量不大?
|
可以这样,ioctl中实现一个函数。 用户态程序调用这个函数。这个函数在内核中wait一个信号量。另一个内核线程向内存页面写入数据后再waikup那个函数。
这样就可以了,用户态调用该函数后进程实际进入sleep状态。不是忙等待
这样就可以了,用户态调用该函数后进程实际进入sleep状态。不是忙等待
|
这个轮询的频率太高了,加个 usleep
最好还是用通知机制
最好还是用通知机制
|
select()/poll()就是实现这个功能的,问题是你的驱动有没有实现它?
|
楼上正解
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。