关于线程安全
About thread safe
在https://github.com/Readify/Neo4jClient/wiki/connecting#threading-and-lifestyles中提到每个数据库只能有一个实例。如果我想使用multi,我可以创建多个实例吗-线程?例如,我想做以下事情:
main() {
for ( int i = 0 ; i < 10 ; ++i )
( new System.Threading.Thread( newUser() ) ).Start() ;
}
void newUser() {
var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
/* do sth... */
}
因为我想模拟多用户场景。我试过这段代码,看起来效果不错。为什么说我的数据库在文档中只能有一个实例?
你可以为所欲为!这只是一个建议,在典型情况下,您将只有一个实例并使用它来节省对 Connect
等的额外调用。
我们要防止的主要事情是有人使用这样的方法:
private static Element Get() {
var client = new GraphClient(...);
client.Connect();
var q = client.Cypher.DOQUERYHERE
return q.Results.Single();
}
他们每次 调用 Get
他们创建一个新实例,这样做的开销会使代码效率非常低。
所以,总而言之 - 如果您想要拥有多个实例 - 当然可以,您拥有的场景是一个很好的理由。
在https://github.com/Readify/Neo4jClient/wiki/connecting#threading-and-lifestyles中提到每个数据库只能有一个实例。如果我想使用multi,我可以创建多个实例吗-线程?例如,我想做以下事情:
main() {
for ( int i = 0 ; i < 10 ; ++i )
( new System.Threading.Thread( newUser() ) ).Start() ;
}
void newUser() {
var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
/* do sth... */
}
因为我想模拟多用户场景。我试过这段代码,看起来效果不错。为什么说我的数据库在文档中只能有一个实例?
你可以为所欲为!这只是一个建议,在典型情况下,您将只有一个实例并使用它来节省对 Connect
等的额外调用。
我们要防止的主要事情是有人使用这样的方法:
private static Element Get() {
var client = new GraphClient(...);
client.Connect();
var q = client.Cypher.DOQUERYHERE
return q.Results.Single();
}
他们每次 调用 Get
他们创建一个新实例,这样做的开销会使代码效率非常低。
所以,总而言之 - 如果您想要拥有多个实例 - 当然可以,您拥有的场景是一个很好的理由。