我一直试图了解在多线程代码中使用同步的真正原因。
我们知道如果多个线程同时访问一个公共共享资源,会导致很多问题,比如死锁、竞速条件等。但是如果我们同步一个由多个线程调用的代码,它将只允许一个线程访问该资源其他线程将在队列中等待。如果是这种情况,那么这与没有同步的单线程应用程序一样好。如果我们同步多线程代码,我们将获得什么性能提升?
只是一个比较两个场景的例子 1. 我们必须在单线程模型中处理 1000 条记录,假设处理一条记录需要 1 秒,所以总共需要 1000 秒才能完成。2. 我们必须在多线程模型中处理 1000 条记录,处理方法是同步的,假设处理一条记录需要 1 秒,假设产生了 10 个线程,所以这里也是,只要一个线程可以访问同步方法,其余线程将在队列中,总共需要 1000 秒才能完成。
如果有人能让我理解这个基本原理,我会非常满意和放心。谢谢,
编辑:
我没有提到编程语言:它的 Java
只是为了了解以下代码的同步和不同步的影响(Spring Batch 示例):
package com.dbas.core;
import java.util.List;
import org.springframework.batch.item.ItemReader;
public class NextReader implements ItemReader<String> {
private List<String> itemList;
public NextReader(ListBean listBean) {
itemList = listBean.getItemList();
}
public synchronized String read()
{
if (!itemList.isEmpty()) {
return itemList.remove(0);
}
return null;
}
}
我们必须同步上面的代码吗?如果没有,实例变量“itemList”将跨多个线程共享,如果共享,上述项目检索是否正常工作?在处理项目的 read() 之后将调用一个处理器。是否建议为多个线程同步上述代码,或者如果没有同步,它是否可以正常工作?
谢谢。