开发者

Question regarding synchronization

Using synchronization开发者_StackOverflow社区 slows down the execution of a program. Is there a way to improve the speed of execution ?


Saying that a synchronization construct slows down execution is like saying that a parachute slows down a skydiver. Going without will be faster, but that's not exactly the point. Synchronization serves a purpose.

To improve the speed of execution, simply apply synchronization properly.

For example, using the Producer/Consumer design pattern may help you reduce the number of synchronization constructs required in your code.


It's simply not true that "synchronization slows down programs" - it only does when the synchronized actions are done very frequently, or when you actually have a lot of threads contending for them. For most applications, neither is true.

Also, some kinds of concurrent operations can be implemented safely without synchronization by using clever data structures or hardware primitives. Examples:

  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • AtomicInteger


  • Profile your code, find out where the real bottlenecks lie.
  • Carefully re-analyse your critical regions. It's very easy to apply synchronization too broadly.
  • Sometimes changing algorithm can lead to a completely different synchronization profile. This doesn't always have a positive effect though!


Have you measured how much (if any) the slowdown is ?

The early JVMs suffered a penalty when using synchronisation. However that situation has improved vastly over the years. I wouldn't worry about a performance penalty when synchronising. There will be many more candidates for optimisations.


You might want to synchronize the block of code rather than the whole method. Without it, you are risking whole lot more!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜