小编lau*_*cer的帖子

我如何在Akka工作?

当您需要执行I/O(即数据库操作)时,actor模型(在Akka中)如何工作?

我的理解是,阻塞操作会引发异常(并且由于Akka使用的Netty的自然性质而基本上破坏了所有并发性).因此我将不得不使用Future或类似的东西 - 但我不理解并发模型.

  1. 1个演员可以同时处理多个消息吗?
  2. 如果一个actor在一个future(即.future.get())中进行了一个阻塞调用,它只会阻止当前actor的执行; 还是会阻止所有参与者的执行,直到阻止呼叫完成?
  3. 如果它阻止所有执行,那么使用未来辅助并发(即,将来不会调用阻塞调用仍然等于创建一个actor并执行阻塞调用)?
  4. 处理多阶段进程的最佳方法是什么(即从数据库中读取;调用阻塞的Web服务;从数据库中读取;写入数据库)每个步骤依赖于最后一步?

基本情况是这样的:

  • 我正在使用Websocket服务器,它将维护数千个会话.
  • 每个会话都有一些状态(即身份验证详细信息等);
  • Javascript客户端将向服务器发送JSON-RPC消息,该消息将把它传递给相应的会话actor,后者将执行它并返回结果.
  • 执行RPC调用将涉及一些I/O和阻塞调用.
  • 将会有大量并发请求(每个用户将通过WebSocket连接发出大量请求,并且会有很多用户).

有没有更好的方法来实现这一目标?

scala scalability websocket actor akka

28
推荐指数
2
解决办法
7606
查看次数

Scala选项 - 摆脱if(opt.isDefined){}

我的代码变得乱七八糟,使用以下代码模式:

val opt = somethingReturningAnOpt
if (opt.isDefinedAt) {
    val actualThingIWant = opt.get
}
Run Code Online (Sandbox Code Playgroud)

有没有办法简化这个?(似乎不必要的复杂和代码味道).理想情况下它会是这样的:

if (Some(actualThingIWant) = somethingReturningAnOpt) {
   doSomethingWith(actualThingIWant)
}
Run Code Online (Sandbox Code Playgroud)

有可能吗?

scala scala-option

27
推荐指数
4
解决办法
2万
查看次数

带有可变对象的Java集合

当对象可变时,TreeSet,HashSet或LinkedHashSet如何表现?我无法想象它们会在任何意义上起作用吗?

如果我在添加对象后修改它; 列表的行为是什么?

是否有比链表或数组等可变对象(我需要排序/索引/等)的收集处理,只是通过他们迭代,每次一个更好的选择?

java collections list mutable

9
推荐指数
1
解决办法
2903
查看次数

面向对象设计中的方法

Q1.在我的大学对面向对象建模和设计的研究中,他们建议考虑对象可以为其方法做什么,以及它对其属性的责任.所有澄清的尝试都导致了进一步的混乱.

这往往会生成一个类图,其中包含具有所有操作的actor,以及仅包含数据的内部类.

这似乎不正确.还有另一种思考如何建模对象的方法吗?

Q2.此外,该课程似乎强调在真实世界对应物之后对物体进行建模,但在域模型中并不一定有意义.IE浏览器.在医疗实践中,他们有,Patient: CreateAppointment(), CancelAppointment()但不是如何实施(你会修改约会集合).还有另一种思考方式吗?

示例Q1

秘书:RecordAppointment(),RecordAppointmentCancellation()

预约:时间,日期,...(没有方法)

例Q2

医生:SeePatient()

虽然SeePatient是一个用例,但它对实际类的方法没有意义.你觉得这个怎么样?

oop class-design analysis

9
推荐指数
1
解决办法
1703
查看次数

为什么比核心更多的线程更快?

我在多线程版本中实现了一个PageRank版本.我在4核Q6600上运行它.当我运行它设置为创建4个线程时,我得到:

real    6.968s
user   26.020s
sys     0.050s
Run Code Online (Sandbox Code Playgroud)

当我运行128个线程时,我得到:

real    0.545s
user    1.330s
sys     0.040s
Run Code Online (Sandbox Code Playgroud)

这对我来说毫无意义.基本算法是sum-reduce:

  1. 所有线程总和输入的子集;
  2. 同步;
  3. 然后每个线程累积来自其他线程的部分结果;
  4. 主线程将所有线程的中间值相加,然后确定是否继续.

分析没有帮助.我不确定哪些数据有助于理解我的代码 - 请问问.

这让我很困惑.

performance multithreading pthreads

7
推荐指数
2
解决办法
4361
查看次数

使用DSL生成C#代码

目前我正在使用的项目没有完全固定的模型(由于外部影响),因此我希望能够灵活地编写它们.目前,它们跨应用程序的三个不同层(db,web api和客户端)进行复制,每个层都有类似的逻辑(即验证).

我想知道是否有一种方法可以让我编写一个模型文件(例如在ruby中),然后让它将该模型转换为必要的c#文件.目前看起来我只是编写了许多可能在任何阶段发生变化的样板代码,而这种生成的方法可以让我专注于更重要的事情.

有没有人有这样的建议,一个dsl /语言我可以做到这一点,并且有没有人有这样的事情的经验?

.net c# dsl code-generation

6
推荐指数
2
解决办法
5139
查看次数

测试Builder模式

我正在尝试单元测试一个看起来像这样的构建器样式模式(mockedObject被注入到函数中,所以我可以模拟它):

Thing thing = 
    mockedObject.createThing()
     .addParam1()
     .addParam2(mockedObject.createParam2()
                   .someData()
                   .build())
    .build();

mockedObject.use(thing);
Run Code Online (Sandbox Code Playgroud)

我正在尝试研究如何测试它(使用JUnit和Easymock)而不必模拟整个构建器对象.我需要对结果对象进行测试,param1param2使用特定值进行设置.

模拟整个构建器模式会使测试变得非常脆弱,而不是我应该开始测试的.

有没有(更好的)测试方法?

java testing mocking builder

6
推荐指数
1
解决办法
3775
查看次数

Moq和访问被调用的参数

我刚刚开始在我已经建立的项目中实施单元测试(使用xUnit和Moq).该项目通过统一容器广泛使用依赖注入.

我有两个服务A和B.服务A是在这种情况下测试的服务.服务A调用B并为其提供内部函数的委托.这个'回调'用于在收到必须处理的消息时通知A.

因此A调用(其中b是服务B的实例):

b.RegisterHandler(Guid id, Action<byte[]> messageHandler);
Run Code Online (Sandbox Code Playgroud)

为了测试服务A,我需要能够调用messageHandler,因为这是它当前接受消息的唯一方式.

可以使用Moq完成吗?即.我可以模拟服务B,这样当RegisterHandler调用时,值messageHandler会传递给我的测试吗?

或者我需要重新设计吗?在这种情况下,我应该使用任何设计模式吗?有谁知道这种设计的任何好资源?

oop unit-testing design-patterns moq xunit.net

5
推荐指数
1
解决办法
1883
查看次数

响应式WCF客户端的双工回调或客户端线程

我有一个特定的服务,其中特定的功能需要比其他功能更长的时间,有时他们可能需要几秒钟才能返回.为了防止在发生这种情况时阻止客户端的UI,首选解决方案是什么:

  1. 使用双工通道,只需使用回调即可在收到数据时更新UI.
  2. 使用单独的线程来调用服务,只需使用请求 - 回复操作,然后在返回数据时更新ui线程.

哪种解决方案更好,特别是在互操作性受到青睐但不是绝对必要时,并且您认为哪种解决方案更快(更清洁)的实施和维护?

wpf wcf multithreading duplex

4
推荐指数
1
解决办法
1783
查看次数

指定在SQLite Group By上返回哪一行

我遇到了一个棘手的问题.我将所有文档的所有版本存储在一个表中.每个文档都有一个唯一的id,版本存储为一个整数,每当有新版本时它就会递增.

我需要一个只从数据库中选择每个文档的最新版本的查询.在使用GROUP BY的作品,看来这将打破这些版本是否会在数据库中的版本中,为了不插入(即它需要它不会永远是最新版本的最大ROWID).

请注意,每个文档的最新版本很可能是不同的编号(即文档A的版本为3,文档B的版本为6).

我在我束手无策,没有任何人知道如何做到这一点(选择所有的文件,但只返回一个记录每个DOCUMENT_ID,并且返回的记录应该具有最高版本号)?

sql sqlite group-by

4
推荐指数
1
解决办法
1378
查看次数

没有开源的可扩展性

我公司目前正在用C#创建一个大型的多层软件包.我们已经对结构采用了SOA方法,我想知道是否有人对如何使具有编程知识的用户可扩展它有任何建议.

这将涉及双重过程:生产系统的管理员批准以允许使用特定插件,以及实际的插件体系结构本身.

我们希望允许用户编写脚本来执行常见任务,修改用户界面的布局(用WPF编写)并添加新功能(即允许列表制表数据).有没有人有任何关于如何实现这一点的建议,或者知道在哪里可以获得知识来做这种事情?

我认为这对于发布带有限制性许可证的软件开源来说是完美的角落,但是,我并不热衷于允许竞争对象访问我们的源代码.

谢谢.

编辑:以为我只是澄清解释为什么我选择了我做的答案.我指的是我公司外部的生产管理员(即客户端),并且让他们以更简单的方式自动化/编写脚本,而不需要他们完全了解c#(他们主要是编程有限的最终用户)经验) - 我更多地考虑DSL.这可能是一个遥不可及的目标,Managed Extensibility Framework似乎提供了迄今为止最好的折衷方案.

.net c# plugins extensibility

3
推荐指数
2
解决办法
358
查看次数

在Scalaz中划分一系列析取

什么是分区的最佳方式Seq[A \/ B](Seq[A], Seq[B])使用Scalaz?

functional-programming scala scalaz

3
推荐指数
1
解决办法
899
查看次数

如何在Coffeescript中提高工作效率?

我想改进我的Coffeescript编码风格.当我在Scala中编程时,我可以在一两个小时内编写一个模块,运行它并且只有一些我可以快速识别和修复的小错误.

在Coffeescript中,我花了大约相同的时间在前面,但我最终得到了大量的小错误,这些错误本来是由静态类型检查器捕获的,我最终必须编译,重新加载浏览器,逐步执行一些代码,添加一些突破点,等等.这是一种令人愤怒的经历,需要更长的时间.

由于缺少接口和许多其他OO功能,抽象和封装功能要困难得多.

是否有设计模式取代OO通常提供的封装/抽象?或者是否有关于如何以更多Coffeescript-y方式思考(或如何使用原型方法解决问题)的入门/指南?

你做了什么来提高Coffeescript(或Javascript - 甚至任何动态类型语言)的工作效率?

javascript coffeescript

2
推荐指数
1
解决办法
730
查看次数