Multithreading 为什么锁会成为多线程程序的瓶颈?

Multithreading 为什么锁会成为多线程程序的瓶颈?,multithreading,locking,Multithreading,Locking,为什么锁会成为多线程程序的瓶颈 如果我想让我的队列通过多线程频繁地pop()和push() 我应该使用哪个锁?“为什么锁可能成为多线程程序的瓶颈?”-想想一个(也称为挡板门),它一次只能让一个人通过,而有一群人等着通过它 对于队列,请使用您的环境提供的最简单的锁。“为什么锁可能成为多线程程序的瓶颈?”-请考虑一个(也称为挡板门),它一次只允许一个人通过,而一群人等待通过 对于队列,使用环境所能提供的最简单的锁。 < P>锁是昂贵的,因为它们需要在算法的中间调用操作系统调用,并且因为在创建CPU时

为什么锁会成为多线程程序的瓶颈

如果我想让我的队列通过多线程频繁地pop()和push()

我应该使用哪个锁?

“为什么锁可能成为多线程程序的瓶颈?”-想想一个(也称为挡板门),它一次只能让一个人通过,而有一群人等着通过它

对于队列,请使用您的环境提供的最简单的锁。

“为什么锁可能成为多线程程序的瓶颈?”-请考虑一个(也称为挡板门),它一次只允许一个人通过,而一群人等待通过


对于队列,使用环境所能提供的最简单的锁。

< P>锁是昂贵的,因为它们需要在算法的中间调用操作系统调用,并且因为在创建CPU时很难正确地执行。 作为程序员,最好把锁放在数据结构的中间给专家,而用一个好的,例如


对于队列,如果可能的话,您可能希望使用原子指令(硬)或自旋锁(更容易),因为它们比互斥锁便宜。如果需要做大量的工作,需要使用一个互斥锁,也就是说,修改一个复杂的树结构

锁是昂贵的,因为它们需要在算法的中间调用操作系统调用,并且因为在创建CPU时很难正常工作。 作为程序员,最好把锁放在数据结构的中间给专家,而用一个好的,例如


对于队列,如果可能的话,您可能希望使用原子指令(硬)或自旋锁(更容易),因为它们比互斥锁便宜。如果您正在做大量需要锁定的工作,例如修改复杂的树结构,请使用互斥体。在我熟悉的线程包中,互斥体的选项是递归和非递归的。您应该选择非递归——所有访问都是lock();队列_op();unlock(),因此无需获得两次锁。

在我熟悉的线程包中,互斥体的选项是递归和非递归的。您应该选择非递归——所有访问都是lock();队列_op();unlock(),因此无需获得两次锁。

您使用的锁取决于您的平台,但通常会有某种互斥的味道。在windows上,您将使用关键部分,而在.NET中,您将使用监视器。我不太熟悉其他平台上的锁定机制。我会远离无锁通道。它们很难正确编程,而且性能提升往往没有您预期的那么大


当锁处于严重争用状态时,它们会成为程序中的瓶颈。也就是说,大量线程都试图同时获取锁。这会浪费大量的CPU周期,因为线程被阻塞,操作系统会花费越来越多的时间在线程之间切换。这种问题最常见于服务器世界。对于桌面应用程序,锁很少会导致性能问题。

您使用的锁取决于您的平台,但通常是某种类型的互斥锁。在windows上,您将使用关键部分,而在.NET中,您将使用监视器。我不太熟悉其他平台上的锁定机制。我会远离无锁通道。它们很难正确编程,而且性能提升往往没有您预期的那么大


当锁处于严重争用状态时,它们会成为程序中的瓶颈。也就是说,大量线程都试图同时获取锁。这会浪费大量的CPU周期,因为线程被阻塞,操作系统会花费越来越多的时间在线程之间切换。这种问题最常见于服务器世界。对于桌面应用程序,锁很少会导致性能问题。

对于队列,编写无锁实现很容易(google away)


锁是瓶颈,因为它们迫使遇到它们的所有其他线程停止正在做的事情,等待锁打开,从而浪费时间。多线程背后的一个想法是在任何给定的时间使用尽可能多的处理器。通过强制线程等待锁,应用程序实际上放弃了它可能使用的处理能力。

对于队列,编写无锁实现很容易(google away)

锁是瓶颈,因为它们迫使遇到它们的所有其他线程停止正在做的事情,等待锁打开,从而浪费时间。多线程背后的一个想法是在任何给定的时间使用尽可能多的处理器。通过强制线程等待锁,应用程序实际上放弃了它可能使用的处理能力。

“为什么锁会成为多线程程序的瓶颈?” 因为等待线程在共享内存解锁之前一直处于阻塞状态

建议您阅读这篇文章“并发性:每个开发人员都必须了解多线程应用程序”

“为什么锁可能成为多线程程序的瓶颈?” 因为等待线程在共享内存解锁之前一直处于阻塞状态


建议您阅读这篇文章“并发性:每个开发人员都必须了解多线程应用程序”

您的问题有点不清楚。你能再说一遍吗?这是家庭作业问题吗?如果是这样,请这样标记。您的问题有点不清楚。你能再说一遍吗?这是家庭作业问题吗?如果是,请贴上标签。