Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟Mongo写锁来衡量性能_Java_Multithreading_Performance_Mongodb_Mongo Java - Fatal编程技术网

Java 模拟Mongo写锁来衡量性能

Java 模拟Mongo写锁来衡量性能,java,multithreading,performance,mongodb,mongo-java,Java,Multithreading,Performance,Mongodb,Mongo Java,我试图使用mongo 1.8.0模拟mongo写锁,但无法看到正确的预期结果 我在同一台服务器上的两个不同数据库中创建了两个mongo集合。我创建了一个DBObjects数组,并将它们插入两个集合中。批插入使用两个线程同时触发。我还跟踪调用DBCollection.insert(DBObject arr,WriteConcern.SAFE)前后的时间 尽管使用不同的对象大小和数组大小,但我始终发现插入两个DBs所需的时间比较接近。我希望一个线程先写,然后阻塞另一个线程,这会导致两个线程所用的时间

我试图使用mongo 1.8.0模拟mongo写锁,但无法看到正确的预期结果

我在同一台服务器上的两个不同数据库中创建了两个mongo集合。我创建了一个DBObjects数组,并将它们插入两个集合中。批插入使用两个线程同时触发。我还跟踪调用DBCollection.insert(DBObject arr,WriteConcern.SAFE)前后的时间

尽管使用不同的对象大小和数组大小,但我始终发现插入两个DBs所需的时间比较接近。我希望一个线程先写,然后阻塞另一个线程,这会导致两个线程所用的时间明显不同。这里有我遗漏的东西吗

class BenchTest {

public static void main() {

    Mongo m = new Mongo(host,port);
    DBCollection coll1 = m.getDB("db0").getColl("coll0");
    DBCollection coll2 = m.getDB("db1").getColl("coll0");

    Thread t1 = new WriteThread();
    t1.setCollection(coll1);
    Thread t2 = new WriteThread();
    t2.setCollection(coll2);

    t1.run();
    t2.run();

}

}


   class WriteThread extends Thread {

    DBCollection coll; 

    public void setCollection (DBCollection coll) {
        this.coll = coll;
    }

    long startTime = System.currentTimeMillis();
    coll.insert( (DBObject1, DBObject2, …, DBObjectn), WriteConcern.SAFE);
    long endTime = System.currentTimeMillis();

    System.out.println ("Time taken = "+(endTime-startTime));

}
为什么不直接用它来模拟“写锁”

很难模拟“写锁”,因为它基本上不会挂起,它只在那里停留很短的时间。在概述的版本(1.8、2.0和2.2)中有很多变化(为了不重复我自己)

这里有一个非常好的例子,是关于其他人在“写锁”上进行类似的测试