我有一个程序,应该从我的cpu中获得最大的 yield 。
它通过pthreads进行多线程处理,从而很好地发挥了作用,而事实是它们“仅”使我的内核达到了约60%的负载,这在我看来还不够。
我正在寻找原因,并问自己(和您在此),是否阻塞功能Mutex_lock/cond_wait是候选对象?
当线程无法在此类函数中运行时会发生什么?
问候,
没有人
更多信息
该设置是一个主线程,它填充了任务池以及从那里获取作业的无数 worker ,并在完成序列化计算后等待通过广播发出的条件通知。他们继续执行此计算中的值,直到完成处理,传递邮件并获取下一个作业...
最佳答案
在典型的现代pthreads实现中,每个线程都由内核管理,与单独的进程不同。诸如pthread_mutex_lock
或pthread_cond_wait
(但也可以说read
)之类的任何阻塞调用都会将其时间分配给系统。然后,系统将在您的进程或其他进程中找到另一个要计划的合格线程,然后运行它。
如果您的程序仅占用60%的CPU,则与pthread操作相比,它更可能在I/O上受阻,除非您对pthread操作所做的操作过于精细。
关于c++ - 当pthreads在mutex_lock/cond_wait中等待时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6671050/