Articles of 睡眠

我怎么能暂停,然后恢复呼叫`睡眠`

调用sleep(10)意味着睡眠指定的秒数。 当我input“睡眠10”时,我想等待10秒钟,但是当我在睡眠命令之后立即使用CTRL-Z(或发送SIGTSTP )时,它不会停止“定时器”(或计数器),即使进程已经停止。 我可以通过jobs看到sleep已经改变为STOPPED但是如果我等待10秒,然后将这个过程发送到前台,它将立即完成 ,即使它运行的时间less于10秒。 所以,我的问题是如何停止睡眠定时器运行? 更新 ::我现在明白,睡眠是使用挂钟时间,所以我怎么能用一个用户cpu时间来实现睡眠

是不可中断的睡眠我的Python程序的原因是真的很慢(如果是这样,我该如何解决这个问题?)?

我有以下select语句(使用sqlite3和pysqlite模块): self.cursor.execute("SELECT precursor_id FROM MSMS_precursor "+ "JOIN spectrum ON spectrum_id = spectrum_spectrum_id "+ "WHERE spectrum_id = spectrum_spectrum_id "+ "AND ROUND(ion_mz,9) = ? AND ROUND(scan_start_time,4) = ? "+ "AND msrun_msrun_id = ?", select_inputValues) 在Python中运行需要55秒。 直接在SQLite命令行上运行它只需要15ms。 现在,我注意到,在这个步骤中,Python程序进入了不间断的睡眠状态( 31283 ndeklein 18 0 126m 24m 3192 D 1.0 0.0 2:02.50 python ,顶级输出中的D),并从100%的CPU下降到1 % 中央处理器。 现在我在查询过程中注意到了,在运行查询时我也查看了顶部输出。 在这段时间内,top也显示它会进入不间断的睡眠状态,虽然它在R和D之间来回切换,只减慢到50%左右(根据D或R状态而变化)。 所以现在我认为这是减慢我的查询速度(请纠正我,如果不间断的睡眠与程序速度无关)。 如果这是真的,我怎样才能确保程序不会进入这种状态? 更新1: […]

sleep()是否干扰scanf()?

我有两个线程 xThread :连续在控制台上打印X. inputThread :从stdin获取input 当用户input“C”或“c”时停止连续打印 #include<stdio.h> #include<sys/select.h> #include<pthread.h> #define S sleep(0) int read_c = 0; pthread_mutex_t read_c_mutex = PTHREAD_MUTEX_INITIALIZER; void* inputThread_fn(void* arg) { char inputChar; while(1) { S; printf("\nChecking input"); scanf("%c",&inputChar); if(inputChar=='C' || inputChar == 'c') { pthread_mutex_trylock(&read_c_mutex); /*<–This must be _lock ? because with the use of trylock even If i don't aquire […]

如何使线程睡眠/阻塞纳秒(或至less几毫秒)?

我怎么能阻止我的线程(也许进程)纳秒或可能一毫秒(至less)期? 请注意,我不能使用睡眠,因为睡觉的参数总是在几秒钟内。

处于睡眠状态的CPU利用率较高

我有一个似乎陷入僵局的过程: # strace -p 5075 Process 5075 attached – interrupt to quit futex(0x419cf9d0, FUTEX_WAIT, 5095, NULL 它坐在“futex”系统调用,似乎是无限期地等待锁。 当“top”运行时,这个过程显示消耗了大量的CPU: # top -b -n 1 top – 23:13:18 up 113 days, 4:19, 1 user, load average: 1.69, 1.74, 1.72 Tasks: 269 total, 1 running, 268 sleeping, 0 stopped, 0 zombie Cpu(s): 8.1%us, 0.1%sy, 0.0%ni, 91.8%id, 0.0%wa, 0.0%hi, […]

如何睡在Linux内核?

我可以使用msleep()函数在内核空间中睡眠指定的时间吗? 如果是这样,我需要包括哪些头文件? #include <linux/time.h>似乎不是正确的。 为此目的可能有更好的function吗?

nanosleep高CPU使用率?

我注意到一个调用nanosleep的小testing程序,在内核比2.6.22更新的Linux机器上运行时,显示CPU使用率的巨大差异。 #include <time.h> int main (void) { struct timespec sleepTime; struct timespec returnTime; sleepTime.tv_sec = 0; sleepTime.tv_nsec = 1000; while (1) { nanosleep(&sleepTime, &returnTime); } return 0; } (是的,我知道这个程序什么都不做) 如果我编译并在openSUSE 10.3机器(2.6.22.19-0.2-default)上运行它,程序甚至不会显示在由“top”生成的进程列表中,这表明它正在使用很less的CPU时间。 如果我在openSUSE 11.1机器(2.6.27.23-0.1-default)上运行它,top会显示占用40%CPU时间的程序。 在Fedora 9(2.6.25-14.fc9.i686)和Fedora 10上运行的时候,在“top”中也显示了相同的高CPU使用率。 内核的变化是否影响到了这一点?

我怎样才能唤醒睡眠的pthread?

我正在用C ++编写一个程序。 我注意到,它正在获得一些线程,其目的是间隔地做一些事情,其中​​有3或4个。 我决定通过编写一个调度程序服务来重构使用这些线程的其他地方可以订阅的调度程序服务,这可以将我在任何时候运行的额外事件线程的数量减less到一个。 我还没有任何使用这个代码, 在我开始写之前,我想知道是否有可能,并对我的devise得到一些反馈。 我想要完成的简短描述是这样的: 添加事件 来电者提供一个事件和一个时间表 时间表提供下一次事件的发生 (事件,时间表)对被添加到事件队列中 中断睡眠事件线程(即唤醒它) 事件线程主循环 尝试获取事件队列中的下一个事件 如果没有未决事件,请直接前往4 获取下一个事件应该发生的时间 睡觉,直到下一个事件(或永远,如果没有等待事件) 如果因任何原因中断了睡眠,请循环回到1 如果睡眠成功完成,请执行当前事件 更新队列(删除事件,如果是重复事件则重新插入) 跳回到1 我已经做了一些研究,并且知道可以中断睡眠线程,并且我相信只要不能同时访问事件队列,就不应该有任何危险的行为。 我可以想象,唤醒一个线程是可能的,在某些情况下,java的Thread的sleep()调用会抛出一个InterruptedExceptionexception,除非它不依赖于操作系统的底层睡眠调用,否则就有可能。 题 任何人都可以评论我的做法吗? 这是一个轮子,我会更好,而不是重塑? 具体来说,如何中断一个睡眠线程,以便在下一条指令处继续执行,并且是否可以从中断的线程中检测到这种情况? 关于提升的说明 我敢打赌,你可以用boost来编写一个调度程序,但是这个编译和运行在一台机器上,因为缺less一个更好的短语,一堆废话。 我之前编译过boost程序,每个拉动boost的文件通常需要花费30多秒才能编译。 如果我能避免这个令人不愉快的发展障碍,我很想。 附录 – 工作守则[根据咖啡店的build议修订] 这是我制作的代码。 它已经过了基本的testing,但是已经适当地处理了不同延误的单一事件和重复事件。 这是事件线程的主体: void Scheduler::RunEventLoop() { QueueLock(); // lock around queue access while (threadrunning) { SleepUntilNextEvent(); // wait for something to […]

试图模拟恒定的字节速率。 与time.sleep结果混淆

上下文 我在我的计算机上使用Windows 7(播放器)和我的大学计算机上的Linux(debian)(stream式传输),我使用ssh来控制它。 我试图通过阅读一个wave文件模拟一个麦克风的恒定字节速率,就好像有人在说话一样。 问题是字节率低于目标。 select32KB / s速率,捕获时间为0.020秒。 我使用time.sleep来实现模拟麦克风,以产生每个0.020秒的每个数据块。 但是所得到的速率是大约27KB / s,而不是32KB / s 问题 我决定在linux机器上testing多less准确的time.sleep,通过阅读这个问题来使用想法。 我做了两种testing。 1)忙碌的睡眠2)正常的睡眠 平均而言,从我得到的样本中可以看出,Linux机器的睡眠分辨率是4ms。 在窗户上它less于/等于1ms。 问题 什么可能会限制在Linux机器上的睡眠分辨率? (在Linux上)为什么忙碌睡眠与time.sleep具有相同的分辨率? 我怎样才能成功地模拟一个麦克风阅读波形文件? 码 import time def busy_sleep(t): s=time.time() while time.time() – s < t: pass e=time.time() return es def normal_sleep(t): s=time.time() time.sleep(t) e=time.time() return es def test(fun): f = lambda x: sum(fun(x) for […]

为什么在Linux中I / O是不可中断的?

它背后的理由是什么? 如果允许进行I / O的进程处理信号,会有什么坏结果呢?