egmkang 服务端开发工程师

Grain的属性

2016-08-28
C#

默认

默认Grain会一个一个去执行请求, 只有当前的请求已经处理掉, 然后才会去执行下一个. 如果当前的Task没有被处理掉, Grain就不能接受新的Task.

Reentrant

考虑下面的任务:

Task Foo()
{
  await task1;    // line 1
  return Do2();   // line 2
}

Task Bar()
{
  await task2;   // line 3
  return Do2();  // line 4
}

如果FooBar相互依赖, 那么在默认的执行环境下, 就发生了死锁, 两个Grain都不能获取新的Task, 都在等待对方返回.

Reentrant就是来解决这种问题, 对方没返回的情况下, 也可以处理下一个Task. Task还是一个一个执行, 只是不会再等待Task执行完成.

不过Reentrant也不是免费, 实现这一需求需要消耗一些资源, 比如活跃的Grain, 调度队列, 目录管理(管理Grain的)等等.

UnorderedAttribute

这个关键字就和他的名字一样, 不是严格按照顺序执行消息.

StatelessWorker

默认只会有一个Grain实例存在, 但是一旦加上了StateLess, 系统就会根据吞吐量创建不同个数的Grain实例.


Similar Posts

上一篇 orleans开篇

Comments