我对Erlang的了解非常有限,但据我所知,它可以以非常低的成本产生"过程".
所以我想知道,幕后的那些"过程"是什么?
它们是纤维吗?主题?延续?
假设我在Kafka中为给定主题分配了10个分区.我可以选择在消费者之间自动对这10个分区进行负载均衡?
我已经阅读了这篇文章/sf/answers/2000625441/但我不确定它涵盖了我正在寻找的内容,或者我可能只是没有得到它.
如果我为每个分区启动一个具有一个使用者的工作者,那么该工作人员将使用所有工作.
但是,如果我在其他地方启动同一个工作人员的另一个实例会怎样?客户端库/ Kafka是否会以某种方式检测到这一点,并重新平衡两个worker之间的负载,以便worker1上的一些活动使用者现在处于空闲状态,而worker2上的相同使用者变为活动状态?
我希望能够按需添加和删除工作人员,并将负载分散到那些,这可能吗?
使用Kafka作为事件存储工作正常,它很容易将消息保留设置为无限制.
但我已经看到一些关于Kafka被用于事件采购的报道.这就是我对如何做到这一点感到困惑的地方.作为一个活动商店,我可以在那里推送我的消息.并根据需要消费或重播.
但对于事件采购,您很可能希望读取给定实体/聚合ID的事件.您当然可以使用分区,但这似乎滥用了这个概念,实际添加新实体很难,因为分区计数更多是在静态方面,即使您可以更改它.那里有没有明智的解决方案?Apache Kafka文档本身仅简要提及事件采购.
我们在侧边栏ul/il列表中使用twitter bootstrap scrollspy,这非常有用.但是,当单击侧栏中的链接时,我们也会使用平滑滚动.这会导致scrollspy突出显示进入视图的每个元素,正常情况下应如此.
但是当通过点击侧导航中的链接触发滚动时,用户很可能不希望菜单在滚动发生时进行动画处理.有没有办法在动画滚动运行时暂时禁用scrollspy,然后在滚动完成后重新启用它?
javascript html-lists twitter-bootstrap scrollspy twitter-bootstrap-3
我正在玩一个简单的控制台应用程序,它创建一个线程,我在主线程和工作线程之间进行一些线程间的通信.
我将主线程中的对象发布到并发队列,而工作线程将该队列出列并进行一些处理.
令我感到奇怪的是,当我描述这个应用程序时,即使我有两个核心.一个核心100%免费,另一个核心完成所有工作,我看到两个线程都在该核心中运行.

为什么是这样?
是因为我在发布消息时使用等待句柄,在处理完成后释放吗?
这是我的示例代码,现在使用2个工作线程.它仍然表现相同,main,worker1和worker2在同一个核心中运行.想法?
[编辑] 它现在有点起作用,至少,与昨天相比,我获得了两倍的性能.诀窍是减慢消费者的速度,以避免使用AutoResetEvent发出信号.
public class SingleThreadDispatcher
{
public long Count;
private readonly ConcurrentQueue<Action> _queue = new ConcurrentQueue<Action>();
private volatile bool _hasMoreTasks;
private volatile bool _running = true;
private int _status;
private readonly AutoResetEvent _signal = new AutoResetEvent(false);
public SingleThreadDispatcher()
{
var thread = new Thread(Run)
{
IsBackground = true,
Name = "worker" + Guid.NewGuid(),
};
thread.Start();
}
private void Run()
{
while (_running)
{
_signal.WaitOne();
do
{
_hasMoreTasks = false;
Action task;
while (_queue.TryDequeue(out task) …Run Code Online (Sandbox Code Playgroud) erlang中的消息循环如何工作,它们在处理消息时是否同步?
据我所知,循环将从"接收"消息开始,然后执行某些操作并点击循环的另一次迭代.
那必须同步吗?对?
如果多个客户端将消息发送到同一个消息循环,那么所有这些消息都会排队并一个接一个地执行,或者?
要在并行处理多个消息,您必须在不同的进程中生成多个消息循环,对吧?
还是我误解了所有这些?
我有一个ASP.NET MVC 4应用程序,我可以在本地浏览
http://localhost:portnr/SomeController
Run Code Online (Sandbox Code Playgroud)
当我尝试从同一网络中的另一台计算机或仅通过本地IP浏览它时,我收到"错误请求 - 无效主机名"
http://192.168.0.x:portnr/SomeController
Run Code Online (Sandbox Code Playgroud)
如果我指定一个无效的portnr,我不会得到相同的错误,所以我猜错误消息来自asp.net本身.我正试图从我的iPhone浏览网站.
我应该怎么做才能使这项工作?
C#主要是强类型的,但是,有一些奇怪的行为:
例如,在滚动自己的枚举器类时,您不必实现IEnumerable,您只需实现一个名为GetEnuerator()的方法,您仍然可以foreach覆盖它.
一些Linq支持也是如此,你可以通过提供一些select where方法等来编写自己的Linq提供者.
那么为什么using(x){}声明需要IDisposable ?
我确实知道为什么linq提供者可以用这种方式编写,因为没有固定的完全合同,只有一种方法模式.
为什么C#编译器(或语言规范?)的设计方式使得某些内置语言结构需要接口,而其他人不需要接口?
我想使用Roslyn遍历给定解决方案中每个项目的所有文档.
这是我现在的代码:
var msWorkspace = MSBuildWorkspace.Create();
var solution = await msWorkspace.OpenSolutionAsync(solutionPath);
foreach (var project in solution.Projects)
{
foreach (var document in project.Documents)
{
if (document.SourceCodeKind != SourceCodeKind.Regular)
continue;
var doc = document;
foreach (var rewriter in rewriters)
{
doc = await rewriter.Rewrite(doc);
}
if (doc != document)
{
Console.WriteLine("changed {0}",doc.Name);
//save result
//the solution is now changed and the next document to be processed will belong to the old solution
msWorkspace.TryApplyChanges(doc.Project.Solution);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,罗斯林在很大程度上是不可改变的.在第一个"msWorkspace.TryApplyChanges"之后,解决方案和文档现在被替换为新版本.
所以下一次迭代仍将遍历旧版本.有没有办法以Roslyn惯用的方式做到这一点?或者我是否必须诉诸某种for(int projectIndex = 0;projectIndex …
我需要从套接字解析输入流.数据是从Telnet客户端发送的,因此我想通过查找'\r'流中的第一个字符来处理传入的字符串,然后在返回char之前选择字节并最终处理任何backspace '\b'字符.
'\b'在这里处理比特的惯用方法是什么?我目前正在使用一个可变堆栈并将chars推到它上面,如果有一个退格,我会弹出最后一个char.然后将结果转换为字符串.
但我认为使用模式匹配和尾递归可能有一些很好的方法.那么,如何以F#方式完成呢?
let receiveInput (inputBuffer:StringBuilder) (received:Tcp.Received)=
let text = Encoding.ASCII.GetString(received.Data.ToArray());
inputBuffer.Append(text) |> ignore
let all = inputBuffer.ToString()
match all.IndexOf('\r') with
| enter when enter >= 0 ->
let textToProcess = all.Substring(0,enter)
inputBuffer.Remove(0,enter+2) |> ignore
//this is the part I'm wondering about
let stack = new Stack<char>()
for c in textToProcess do
if c = '\b' then stack.Pop() |> ignore
else stack.Push c
let input = new System.String(stack |> Seq.rev |> Seq.toArray)
Some(input)
| …Run Code Online (Sandbox Code Playgroud) c# ×3
apache-kafka ×2
erlang ×2
ascii ×1
asp.net ×1
asp.net-mvc ×1
concurrency ×1
f# ×1
fiber ×1
html-lists ×1
iis-7 ×1
javascript ×1
message-loop ×1
roslyn ×1
scrollspy ×1
telnet ×1