我有一个程序,应该从我的cpu中获得最大的 yield 。

它通过pthreads进行多线程处理,从而很好地发挥了作用,而事实是它们“仅”使我的内核达到了约60%的负载,这在我看来还不够。

我正在寻找原因,并问自己(和您在此),是否阻塞功能Mutex_lock/cond_wait是候选对象?

当线程无法在此类函数中运行时会发生什么?

  • pthread是否切换到它处理的另一个线程或
  • 线程是否将时间分配给系统,如果是这种情况,我可以更改此行为吗?

  • 问候,

    没有人

    更多信息
    该设置是一个主线程,它填充了任务池以及从那里获取作业的无数 worker ,并在完成序列化计算后等待通过广播发出的条件通知。他们继续执行此计算中的值,直到完成处理,传递邮件并获取下一个作业...

    最佳答案

    在典型的现代pthreads实现中,每个线程都由内核管理,与单独的进程不同。诸如pthread_mutex_lockpthread_cond_wait(但也可以说read)之类的任何阻塞调用都会将其时间分配给系统。然后,系统将在您的进程或其他进程中找到另一个要计划的合格线程,然后运行它。

    如果您的程序仅占用60%的CPU,则与pthread操作相比,它更可能在I/O上受阻,除非您对pthread操作所做的操作过于精细。

    关于c++ - 当pthreads在mutex_lock/cond_wait中等待时会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6671050/

    10-09 13:41