我上周刚刚参加了Cassandra的速成课程,从Thrift API到CQL到了SuperColumns,我不应该使用它们和用户复合键.
我现在正在尝试CQL3,看起来我不能再插入未在架构中定义的列,或者看到那些列中的列 select *
我错过了一些在CQL3中启用它的选项,或者它是否希望我定义模式中的每一列(忽略宽,灵活行的目的,imho).
我正在尝试找到异步初始化actor的正确模式,以便我可以查找ActorRef它所需的依赖项.我想避免使用ActorSelection,因为它是
tell的看看Actor LifeCycle看起来几乎是同步的,直到消息循环开始,包括preStart等等,这让我觉得我只有两个选择之一:
使用签名为的工厂方法 Future[ActorRef]
构造actor的所有依赖项都是异步解析并通过via传递的Props.
这种方法的主要问题是你不能使用这个工厂在另一个actor内部构造一个actor,因为它有同样的问题,即它一直是乌龟,所有actor的层次结构及其异步连接.
使用become和stash转换演员
使用actorOf,立即生成一个actor ,ActorRef但它以初始化状态启动,执行依赖解析,stash同时传入消息,最后become执行运行状态和unstashAlling.
对于演员而言,这感觉更加惯用,即使我的所有依赖都将var取而代之val.
两者似乎都有很多开销,让我想知道我是否是最好的选择,或者我是否在文档中找不到合适的模式.
我有一些旧的Java代码用于REST服务,它为每个传入的请求使用一个单独的线程.即主循环将在socket.accept()上循环并将套接字移交给Runnable,然后Runnable将启动其自己的后台线程并调用自身运行.直到最近,我才注意到这种情况令人钦佩,我注意到在高负荷下接受处理请求的滞后将变得不可接受.当我钦佩地说,我的意思是它在没有大量CPU使用的情况下每秒处理100-200个请求.当其他守护进程添加负载时性能只会降低,然后只有一次负载超过5.当机器处于高负载(5-8)时,其他进程的组合,从接受到处理的时间会变得非常高( 500ms到3000ms)而实际处理时间不到10ms.
已经习惯了.NET上的Threadpools,我认为线程创建是罪魁祸首,我想我会在java中应用相同的模式.现在我的Runnable使用ThreadPool.Executor执行(并且池使用和ArrayBlockingQueue).同样,它在大多数情况下都很有效,除非机器负载变高,然后从创建runnable到run()被调用的时间表现出大致相同的荒谬时间.但更糟糕的是,随着线程池逻辑的到位,系统负载几乎翻了一番(10-16).所以现在我得到了相同的延迟问题,负载加倍.
我怀疑是队列的锁争用比先前没有锁的新线程启动成本更差.任何人都可以分享他们的新线程与线程池的经验.如果我的怀疑是正确的,那么任何人都有另一种方法来处理没有锁争用的线程池?
我很想让整个系统单线程,因为我不知道我的线程有多大帮助,IO似乎不是一个问题,但我确实得到了一些长期存在的请求阻止一切.
谢谢,阿恩
更新:我切换到Executors.newFixedThreadPool(100);并保持相同的处理能力,加载几乎立即加倍并运行12小时显示负载始终保持2倍.我想在我的情况下,每个请求的新线程更便宜.
我试图弄清楚是否有一个简单的语法将方法组转换为表达式.使用lambdas似乎很容易,但它并没有转化为方法:
特定
public delegate int FuncIntInt(int x);
Run Code Online (Sandbox Code Playgroud)
以下所有内容均有效:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用实例方法,它会在表达式中分解:
Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt; //does not compile
Run Code Online (Sandbox Code Playgroud)
最后两个都无法使用"无法将方法组'AFuncIntInt'转换为非委托类型'System.Linq.Expressions.Expression <...>'进行编译.您是否打算调用该方法?"
那么在表达式中捕获方法组有一个很好的语法吗?
谢谢,阿恩
当给出一个d你可能正在处理一个固定的序列,如列表或数组,AST将枚举一些外部数据源,甚至是一些现有集合上的AST.有没有办法安全地"实现"可枚举,以便像foreach,count等枚举操作每次都不执行AST?
我经常用来.ToArray()创建这个表示,但如果底层存储已经是一个列表或其他固定序列,那似乎就是浪费了复制.如果我能这样做会很好
var enumerable = someEnumerable.Materialize();
if(enumberable.Any() {
foreach(var item in enumerable) {
...
}
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
不必担心,.Any()并foreach尝试枚举序列两次,没有它不成功复制可枚举.
我正在尝试使用node.js加密API和密码保护的私钥来签名并验证消息,这样就可以获得以下信息:
> var sig = crypto.createSign('RSA-SHA256').update('psst').sign(pk,'hex');
Enter PEM pass phrase:
Run Code Online (Sandbox Code Playgroud)
并且节点在此时锁定.我似乎无法找到以编程方式传递密码的选项.
我喜欢工作表作为REPL的替代品,但我继续在工作表中实现函数,然后将它们复制回实际项目中.如何从当前项目导入包,以便我可以在工作表中调用这些函数?
我有一个Play过滤器,可以像这样执行一些post请求记录:
class LoggingFilter extends Filter with LazyLogging {
override def apply(f: (RequestHeader) => Future[Result])(rh: RequestHeader): Future[Result] =
f(rh) andThen {
case Success(result) =>
logger.info(s"[SUCCESS] ${result.header.status}")
case Failure(e) =>
val end = System.currentTimeMillis()
val duration = end - start
logger.error(s"[FAILURE] ${e.getMessage}}", e)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也有onServerError处理程序将某些已知的异常映射到适当的Result.不幸的是,在错误处理程序将已知异常转换为结果之前调用过滤器,让我没有发送给调用者的STATUS代码和日志中处理异常的堆栈跟踪.
有没有办法定义过滤器,以便它包装请求发布错误处理程序调用?
我想使用一个方法返回一个方法返回一个值,以便在以后可用时返回一个值,这样调用者可以阻止使用Wait或附加一个continuation甚至等待它.我能想到的最好的是:
public class Future<T> {
private ManualResetEvent mre = new ManualResetEvent();
private T value;
public async Task<T> GetTask() {
mre.WaitOne();
return value;
}
public void Return(T value) {
this.value = value;
mre.Set();
}
}
Run Code Online (Sandbox Code Playgroud)
主要问题是mre.WaitOne()是阻塞的,所以我假设每次调用GetTask()都会调度一个新线程来阻塞.有没有办法以异步方式等待WaitHandle,或者是否已经有一个帮助器来构建等效功能?
编辑:好的,是TaskCompletionSource我正在寻找什么,我只是在为自己的生活而努力?
scala ×3
c# ×2
akka ×1
async-await ×1
async-ctp ×1
asynchronous ×1
c#-3.0 ×1
cassandra ×1
cql ×1
cql3 ×1
cryptography ×1
expression ×1
java ×1
lambda ×1
linq ×1
method-group ×1
node.js ×1
openssl ×1
scala-ide ×1
sockets ×1
threadpool ×1
xmpp ×1