标签: delayed-execution

延迟评估期间的记忆

计算机程序的结构和解释一书介绍了一个记忆过程如下:

(define (memo-proc proc)
  (let ((already-run? false) (result false))
    (lambda ()
      (if (not already-run?)
          (begin (set! result (proc))
                 (set! already-run? true)
                 result)
         result))))
Run Code Online (Sandbox Code Playgroud)

在提出延迟执行的定义的同时,(delay <exp>)(memo-proc (lambda () <exp>))。可以使用以下过程强制延迟对象:

(define (force delayed-object)
  (delayed-object))
Run Code Online (Sandbox Code Playgroud)

在给出这些定义的章节中,计算是使用流完成的。每个流都是一对,有一个头部和一个延迟尾部。

但是,我不知道如何在不使用查找表或其他累积先前调用的数据结构的情况下实现记忆化。

包括这些定义的章节在这里

当我们用各种参数记住单个过程时,查找表会很有用。然后,我们将参数作为键,将过程的结果作为值。在这种情况下,我们有空过程,因此我们不需要查找表。我们所需要的只是我们迄今为止创建的一组延迟对象。但是,这里使用了闭包。

根据memo-proc上面的定义,每个延迟对象实际上是一个带有值already-run?和的闭包result,它们都初始化为false。但是,由于调用中的每个延迟对象proc都有自己的闭包和自己的本地already-run?result,因此修改它们不会更改调用树中的其他对象。因此,我觉得任何其他程序都不会再读取记忆值。

所以我的问题是,我在想什么,或者对一切如何运作的正确解释是什么?

scheme stream memoization sicp delayed-execution

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

jQuery将函数调用传递给另一个函数和执行顺序

我有这个javascript:

triggerAnimation(listItem,toggleToggleRadioListItem(listItem));


function triggerAnimation(listItem,passThruFunction){
    listItem.find(".inlineLoading").show();
// pause and then call the toggle function
    $("body").animate({opacity: 1}, 1000, 
    function(){
        alert("a");
    passThruFunction;
    }
    );  
}

function toggleToggleRadioListItem(listItem) {
    alert("b");
};
Run Code Online (Sandbox Code Playgroud)

应该发生什么:

  • triggerAnimation被称为传递对象和函数
  • triggerAnimation执行虚拟动画(创建暂停)然后引发警报并触发回调函数,该函数执行传递的函数.
  • 传递的功能称为发出警报.

基于以上所述,我希望警报A出现在警报B之前,但事实并非如此.发生的事情是(看起来)一旦调用triggerAnimation()就会调用警报B. 这是为什么?我怎样才能实现这种行为?

jquery delayed-execution

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

PLINQ 延迟执行

鉴于延迟执行,我试图了解并行性如何使用 PLINQ 工作。这是一个简单的例子。

string[] words = { "believe", "receipt", "relief", "field" };
bool result = words.AsParallel().Any(w => w.Contains("ei"));
Run Code Online (Sandbox Code Playgroud)

使用 LINQ,我希望执行达到“收据”值并返回 true,而不执行其余值的查询。

如果我们并行执行此操作,则“relief”的评估可能在“receipt”的结果返回之前就已开始。但是一旦查询知道“receipt”会导致一个真实的结果,其他线程是否会立即yield?

就我而言,这很重要,因为“任何”测试可能非常昂贵,而且我希望释放处理器以执行其他任务。

c# multithreading yield delayed-execution plinq

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

Linq to Sql DB Object to Domain Object的映射和性能

我在尝试使用LINQ to SQL查询和映射到我的域对象DRY时遇到问题,而不会产生多次往返db的成本.鉴于这个例子:

var query1 = from x in db.DBProducts
            select new MyProduct
            {
                Id = x.ProductId,
                Name = x.ProductName,
                Details = new MyProductDetail
                {
                    Id = x.DBProductDetail.ProductDetailId,
                    Description = x.DBProductDetail.ProductDetailDescription
                }
            }
Run Code Online (Sandbox Code Playgroud)

该查询将对DB进行一次往返.大!但是,我看到的问题是,最终,我还将有一个'GetProductDetails'方法,它还需要做一些SAME"数据对象 - >域对象"映射,与上面非常类似.

为了减轻一些映射,我认为扩展部分数据对象类为我做映射可能是一个很酷的主意,如下所示:

public partial class DBProduct
{
    MyProduct ToDomainObject()
    {
        return new MyProduct
        {
            Id = this.ProductId,
            Name = this.ProductName,
            Details = this.DBProductDetails.ToDomainObject()
        };
    }
}

public partial class DBProductDetail
{
    MyProductDetail ToDomainObject()
    {
        return new MyProductDetail
        {
            Id = this.ProductDetailId,
            Description = this.ProductDetailDescription
        }; …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net-mvc delayed-execution linq-to-sql

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

在interop C#期间延迟excel计算

我必须从C#程序中将几百个单元格输入到Excel表格中.每次我设置一个单元格或一个范围时,excel会慢慢响应...可能会在我添加的每个输入之间更新各种输出.有没有办法从我的C#程序中禁用计算,并在完成设置单元格并准备读取输出后重新启用它?

c# excel com-interop delayed-execution

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

你能在Matlab中执行延迟集(:= Mathematica)吗?

所以,我最近从Mathematica转换为Matlab,虽然Matlab具有Mathematica的大部分有用功能,但我无法弄清楚如何执行相当于Mathematica的延迟设置操作':=',它将变量赋值给a懒散的时尚.

例如,在Mathematica中:

y = 2;

x:= y;

y = 3;

X

将x的值赋予3,而我在Matlab中获得相同行为的唯一方法是:

y = 2;

x = @()(y);

y = 3;

X()

虽然在技术上回答了我的问题,但它是一个非常特别的工作,需要将x作为一个函数来处理.

那么有更自然的方法来做到这一点是Matlab吗?

编辑:

我的ad-hoc解决方案仅在y是句柄类的字段时才起作用,为了清楚起见,我把它留在了代码之外(它应该是someclass.y).我的问题的答案最好不会有这个限制,但如果确实如此,我仍然会接受.

matlab wolfram-mathematica lazy-evaluation delayed-execution

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

使用setInterval的Ajax Heartbeat,同时防止多个调用

我希望在后台使用jQuery作为"心跳"进行AJAX调用,以便我的Web应用程序可以检查新数据.例如每10秒钟.

我在其他帖子上看到,可以使用它来setInterval()调用每隔X毫秒执行调用的方法.

但是,如果我的AJAX调用超过10秒钟会发生什么?我仍然希望它完成最后一个请求,并且我不希望在已经有一个正在进行的情况下发起另一个呼叫.这可能导致相同的信息被放置到页面两次!

实现此方法的方法是什么,等待原始AJAX调用完成,而不是简单地"每10秒",原始的AJAX调用可能尚未完成.

ajax jquery delayed-execution heartbeat

5
推荐指数
2
解决办法
8793
查看次数

Storm 中的延迟队列实现——Kafka、Cassandra、Redis 或 Beanstalk?

我有一个风暴拓扑来处理来自 Kafka 的消息,并根据手头的任务在 Cassandra 中进行 HTTP 调用/保存。我一收到消息就处理。由于响应来自外部源(如 HTTP),很少有消息没有被完全处理。我想为重试实现指数退避机制,以防 HTTP 服务器在一段时间后不响应/返回错误消息以重试。我可以想到一些可以实现它们的想法。如果我可以使用任何其他容错解决方案,我想知道其中哪一个是更好的解决方案。由于这用于实现指数退避,因此每条消息将具有不同的延迟时间。

  • Kafka中的另一个主题发送给它,稍后再使用。我首选的解决方案。我知道我们可以使用 Kafka 偏移量,以便在后期使用消息。我怎么找不到文档/示例代码来做同样的事情。如果有人可以帮助我解决这个问题,那将非常有帮助。
  • 编写消息Cassandra / Redis并编写调度程序以获取未处理且准备好使用的消息并将其发送到 Kafka,以便我的 Storm 拓扑可以使用它。(其他遗留项目中的现有解决方案(非风暴))
  • 延迟发送到Beanstalk(其他遗留项目中的现有解决方案(非风暴)。我想避免使用这个解决方案,只有在我无法选择的情况下才使用它)。

虽然这几乎是我想做的。我无法找到文档来实现Kafka - Delayed Queue implementation using high level consumer 中提到的delayProcessingUntil

我过去曾使用 Beanstalk 从 Data-store 完成预定工作并延迟,但我更喜欢使用 Kafka。

java message-queue delayed-execution apache-kafka apache-storm

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

Underscore debounce vs vanilla Javascript setTimeout

我知道debounce在Undercore.js中会返回一个函数,该函数将推迟执行直到等待时间结束.

我的问题是,使用vanilla Javascript中debounce的常规setTimeout函数是否有优势?他们俩都不一样吗?

javascript settimeout delayed-execution underscore.js lodash

5
推荐指数
3
解决办法
4665
查看次数

iOS - 延迟后的Web服务请求

我有一个搜索栏,其中包含一些建议UITableView,这些建议会在用户输入时填充(使用JSON服务).这些服务调用需要在延迟500ms的非打字后进行.如果用户开始输入500ms的这段时间,则需要取消队列中的当前呼叫,并且应用程序必须等待另外500ms的非活动才能再次afterDelay呼叫.我知道我必须performSelector:withObject:afterDelay在整个情况下使用,但我无法适应条件.我尝试使用一堆bool但它只是变脏......任何帮助?

iphone delayed-execution ipad ios performselector

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