皮皮网

【tcp调试助手 源码】【庄家埋伏公式源码】【校园办公系统 源码】msleep源码

2024-12-27 14:22:44 来源:深入理解osgi源码

1.linux中如何实现sleep(0)的功能
2.lua报错 怎么解决 谢大神

msleep源码

linux中如何实现sleep(0)的功能

       å‰æ®µæ—¶é—´ä»Žwindows移植了一个程序到linux上,不知为何性能奇差。查了下原因,发现是由于一个函数ZeroSleep特别耗时,这个函数的代码很简单,如下:

       void ZeroSleep()

       {

        Sleep(0);

       }

       Sleep(0)作用是用来释放cpu的时间片,避免忙等待。于是想当然的在linux上实现为:

       void ZeroSleep()

       {

        msleep(0);

       }

       ä½†å…¶å®žmsleep API的源代码如下:

       void msleep(unsigned int msecs)

       {

        unsigned long timeout = msecs_to_jiffies(msecs) + 1;

        while (timeout)

        timeout = schedule_timeout_uninterruptible(timeout);

       }

       å¦‚此一来,即使参数为0,也至少要睡眠一个jiffies单位的时间,因此导致严重的性能问题。

       è¯¥é—®é¢˜çš„解决方法是:

       æ—¢ç„¶ZeroSleep的目的是释放cpu资源,那么就可以通过调用schedule()函数替换msleep 。而且实际上msleep本身也是通过调用schedule_timeout_uninterruptible实现的,所以这个做法也是合理的。

       /blog/static//

lua报错 怎么解决 谢大神

       错误提示已经写的源码tcp调试助手 源码很明白了 你的init这个函数没有实现

function init(xxx)

         xxxx

       end

       补上你缺的这个函数 然后实现对应的功能

       或者 require你所需要的lua文件