在多任务系统中,某些异常情况会阻止执行进程或线程的进度.我将这两个进程和线程简称为"进程".其中两个条件称为死锁和活锁.
前者指的是相互阻塞的进程,从而阻止了执行.后者指的是阻止彼此前进的过程,但实际上并不阻止执行.例如,他们可能会不断地让对方回滚交易,也无法完成它们.
另一个条件被称为资源饥饿,其中进程进展所需的一个或多个有限资源已被其耗尽,并且除非进程进展,否则无法恢复.这也是活锁的一个特例.
我想知道是否有任何其他定义,特别是学术定义,对于"饥饿",不仅限于"资源饥饿".特别欢迎参考文献.
而且,不,这不是功课.:-)
我认为每种语言都是为特定目的而创建的.Scala创建的是什么以及它最好解决哪些问题?
我想通过基准测试估算库中某些方法的性能.我不需要精确度 - 它足以证明某些东西是O(1),O(logn),O(n),O(nlogn),O(n ^ 2)或更糟.因为大哦意味着上限,所以估计O(logn)的O(logn)不是问题.
现在,我正在考虑找到最适合每个大数据的数据的常数乘数k(但会覆盖所有结果),然后选择最适合的大哦.
鉴于到目前为止的评论,我需要做一些事情:
n尺寸对方法进行基准测试.对于每种规模n,我将使用经过验证的基准框架,提供可靠的统计结果.这是我想要测量的那种东西的一个例子.我有一个带有此签名的方法:
def apply(n: Int): A
Run Code Online (Sandbox Code Playgroud)
给定a n,它将返回序列的第n个元素.给定现有实现,该方法可以具有O(1),O(logn)或O(n),并且小的改变可以使其错误地使用次优实现.或者,更容易,可以获得一些依赖于它的方法来使用它的次优版本.
我想将我得到的一些数字转换为双打,但这些数字不是美国标准语言环境,而是另一个数字.我怎样才能做到这一点?
我正在寻找替代-print或javap作为一种方法来确定编译器在Scala中正在做什么.随着新的反射/宏库,reify似乎应该是一个很好的候选人,如在返璞词的宏观的desugar.它甚至展示了人们如何做到这一点,前M4.
所以问题是,在Scala 2.10.0-M4之后,我可以在Scala的REPL上输入最短/最简单的东西来获取表达式的AST?
鉴于不可能看到未来,与Clojure,Scala或Haskell有关的哪些因素可能决定其中一个是否能够抓住?
是否有文化或经济问题可以使其中一种语言优于其他语言?
或者这些语言是否因其概念复杂性而无法获得牵引力?
我刚刚开始使用Scala,我刚学会了如何使方法成为正确关联(而不是在命令式面向对象语言中常见的更传统的左关联性).
首先,当我cons在Scala中看到列表的示例代码时,我注意到每个示例总是在右侧有List:
println(1 :: List(2, 3, 4))
newList = 42 :: originalList
Run Code Online (Sandbox Code Playgroud)
然而,即使在一遍又一遍地看到这一点之后,我也没有三思而后行,因为我不知道(当时)这::是一种方法List.我只是假设它是一个运算符(再次,在Java中的运算符意义上),并且关联性并不重要.List在示例代码中始终出现在右侧的事实似乎巧合(我认为它可能只是"首选样式").
现在我知道的更好:它必须以这种方式编写,因为它::是正确联想的.
我的问题是,能够定义右关联方法的重点是什么?
这纯粹是出于审美原因,还是在某些情况下,权利关联实际上可以带来某些与左联结相关的好处?
从我(新手)的角度来看,我真的不知道如何
1 :: myList
Run Code Online (Sandbox Code Playgroud)
比任何更好
myList :: 1
Run Code Online (Sandbox Code Playgroud)
但这显然是一个微不足道的例子,我怀疑这是一个公平的比较.
scala> last(List(1, 1, 2, 3, 5, 8))
res0: Int = 8
Run Code Online (Sandbox Code Playgroud)
为了得到上面的结果,我写了这段代码:
val yum = args(0).toInt
val thrill:
def last(a: List[Int]): List[Int] = {
println(last(List(args(0).toInt).last)
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么问题?
我正在研究使用Capistrano作为通用部署解决方案的可能性."通用",我的意思是不是铁轨.我对我发现的文档的质量不满意,但是,我认为,我不是在考虑那些假设你正在部署rails的文档.所以我会尝试基于一些例子来解决问题,但是我从一开始就面临着一些问题.
我的问题是cap deploy没有足够的信息来做任何事情.重要的是,它缺少我要部署的版本标签,而这具有在命令行上传递.
另一个问题是我如何指定我的git存储库.我们的git服务器在用户的帐户上通过SSH访问,但我不知道如何更改deploy.rb以使用用户的id作为scm URL的一部分.
那么,我该如何完成这些事情呢?
例
我想部署第二个版本的第一个sprint的结果.那被标记在git存储库中r2s1.另外,假设用户"johndoe"负责部署系统.要访问存储库,他必须使用URL johndoe@gitsrv.domain:app.因此,存储库的远程URL取决于用户ID.
获取所需文件的命令行将是:
git clone johndoe@gitsrv.domain:app
cd app
git checkout r2s1
Run Code Online (Sandbox Code Playgroud) scala ×6
java ×3
algorithm ×1
big-o ×1
capistrano ×1
clojure ×1
deployment ×1
haskell ×1
list ×1
localization ×1
macros ×1
math ×1
multitasking ×1
operators ×1
scala-2.10 ×1
theory ×1