|
|
1
1
在寻找同步时,联锁*功能有时会被置于雷达之下。它们相当快,但它们确实会强制进行一些同步和CPU缓存更新,这会降低您的速度。话虽如此,人们可能不得不使用这些函数 很多 以获得您描述的影响。 没有进一步的细节,我建议分析工作线程,深入到代码的冗长部分,并最终确定瓶颈。鉴于效果显著,瓶颈应该是显而易见的。如果您找到了位置,但没有找到原因,请使用导致问题的代码的实际部分更新您的问题。 |
|
|
2
1
你的个人
总的来说,我建议大家看看英特尔的产品 Threading Building Blocks 还是Windows的 thread pool 。这些应该处理许多其他棘手的细节(创建多少线程、如何公平地调度、为避免缓存未命中而提供哪些数据等)。 |
|
|
3
1
在创建任何工作线程之前,您可以尝试执行所有动态内存分配。动态内存分配访问需要关键段访问的堆。目前新的分配将做什么。当您有多个线程在运行时,这些线程将有很多时间执行,如果这些工作线程正在进行一些动态内存分配,那么您的主线程可能会有一点时间分配动态内存,因为它将不得不等待其他线程从新线程中出来。 |
|
|
4
0
您正在创建多少线程,有多少内核?每个核心超过2个线程将显著降低性能。 通常在处理类似这样的问题时,您会设置一个线程池(即双核机器最多4个线程),然后为每个线程分配一个“作业”。当该作业完成时,从作业列表中弹出下一个作业,线程继续处理新作业。在处理完所有作业之前,请一直执行此操作。请记住,池中的线程可以直接从作业列表中获取下一个作业,而不是让工作线程将下一个作业分配给它。 工作流程如下。
1) 主线程创建许多工作线程。
解决这个问题还有其他方法,但上面的方法可能是最有效、最容易实现的方法。 |
|
|
PHPLover · “支持PHP扩展或功能的端口”实际上是什么意思? 1 年前 |