小编kol*_*osy的帖子

Postgres中的Atomic UPDATE .. SELECT

我正在建立各种排队机制.有需要处理的数据行和状态标志.我正在使用一个update .. returning条款来管理它:

UPDATE stuff
SET computed = 'working'
WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1)
RETURNING * 
Run Code Online (Sandbox Code Playgroud)

嵌套的选择部分是否与更新锁相同,或者我是否有竞争条件?如果是这样,内部选择需要是select for update吗?

postgresql concurrency multithreading race-condition transaction-isolation

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

与CouchDB中的include_docs = true相比,在emit中包含文档

我在某个地方跑过去提到做一个emit(key, doc)会增加索引构建的时间(或者那种效果).

有什么好处给它,没有任何理由不只是经常做emit(key, null),然后include_docs = true

couchdb

18
推荐指数
1
解决办法
5189
查看次数

神秘的ruby语法错误

我很困惑:这几乎是一个RoR动作邮件程序指南的复制/粘贴,但它会引发语法错误:

class Contact < ActionMailer::Base


  def contact a_name, a_company, a_phone, a_email, a_comments
    subject    "Contact request from #{name}"
    recipients "some@address.com"
    from       "some_other@address.com"
    sent_on    Time.now
    body       { :name => a_name, :company => a_company, :phone => a_phone, :email => a_email, :comments => a_comments }
  end

end
Run Code Online (Sandbox Code Playgroud)

错误是:

app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting '}' body { :name => a_name, :company => a_company... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...{ :name => a_name, :company => a_company, :phone => …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

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

多个键范围作为CouchDB视图的参数

根本问题 - 假设我的文档有"类别"时间戳.如果我希望"foo"类别中的所有文档的时间戳都在过去两小时内,那么很简单:

function (doc) {
  emit([doc.category, doc.timestamp], null);
}
Run Code Online (Sandbox Code Playgroud)

然后查询为

GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|]
Run Code Online (Sandbox Code Playgroud)

问题来自于我在过去两小时内想要类别为foobar的东西.如果我不关心时间,我可以通过按键集合直接按键.不幸的是,我对范围没有这样的选择.

在此期间我最终做的是将时间戳四舍五入为两小时的块,然后将查询多路复用:

POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是如果我想回去大量的时间(与块大小的关系)会变得混乱.

有没有办法将多个startKey/endKey对发送到视图,类似于键:[]数组可以发布键?

couchdb

12
推荐指数
1
解决办法
7643
查看次数

多处理器系统中volatile关键字的成本是多少?

我们遇到了性能问题,一个潜在的罪魁祸首是集中使用易失性单例.具体代码是表单

class foo {
  static volatile instance;
  static object l = new object();

  public static foo Instance {
    if (instance == null)
      lock(l) {
        if (instance == null)
          instance = new foo();
      }

    return foo();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是在一个8路的盒子上运行,我们看到上下文切换到每秒500,000的调整.典型的系统资源很好 - 25%cpu util,25%内存util,低IO,无分页等.

使用volatile字段是否会导致内存屏障或任何类型的cpu缓存重新加载?或者它只是每次都追踪主存储器,仅用于该字段?

c# multithreading volatile

11
推荐指数
1
解决办法
1971
查看次数

模块v.F#中的命名空间

我有一个用F#编写的库,由C#和F#使用.此库foo在模块中定义bar名称空间中的类random:

#light
namespace random

module bar

type foo() = ...
Run Code Online (Sandbox Code Playgroud)

现在,当我去消费类型时random.foo.bar,C#intellisense将其视为类型bar,嵌套在类型中random.foo.

问题是:C#将外部可消耗代码定义到模块而不是命名空间中是否有优势?我知道模块是分组函数的好方法,但是类呢?

f#

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

lambdas内联吗?

简单的lambda表达式是否内联?

我有一种趋势(感谢f#和其他功能性的尝试)将单个函数中存在的重复代码封装到lambda中,然后调用它.我很好奇,如果我因此导致运行时开销:

var foo = a + b;
var bar = a + b;
Run Code Online (Sandbox Code Playgroud)

v

Func<T1, T2> op = () => a + b;
var foo = op();
var bar = op();
Run Code Online (Sandbox Code Playgroud)

哪一个运行成本更高?

c#

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

Android ANR,看不到活动代码

我在尝试打开 2 个单独的活动时发生了 ANR。非常零星,只有某些用户无法在我们的任何测试硬件上进行复制。两份报告都有一系列不起眼的线程,我们的两个后台线程正确地等待它们的通知程序锁。主线程在这两种情况下都这样做:

"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41790710 self=0x41775c90
| sysTid=347 nice=0 sched=0/0 cgrp=apps handle=1074003964
| state=S schedstat=( 0 0 0 ) utm=10817 stm=2453 core=0
#00 pc 0001b6e4 /system/lib/libc.so (__ioctl+8)
#01 pc 0002be67 /system/lib/libc.so (ioctl+14)
#02 pc 0001b929 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
#03 pc 0001c0c7 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 00001451 /system/lib/libsystem_server.so (system_init+384)
#05 pc 00020b4c /system/lib/libdvm.so (dvmPlatformInvoke+112)
#06 pc 000516ab /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
#07 pc 00029fe0 /system/lib/libdvm.so
#08 pc 0002e9a4 /system/lib/libdvm.so (dvmInterpret(Thread*, …
Run Code Online (Sandbox Code Playgroud)

android android-anr-dialog

6
推荐指数
0
解决办法
1757
查看次数

泛型类型变量限制和接口

我正在实现一个通用接口(特别是iqueryprovider).在某些时候,我被迫返回一个通用结果,我需要从一些内部接口获取:

public TResult Execute<TResult>(...) {
  return something.Foo<TResult>();
}
Run Code Online (Sandbox Code Playgroud)

什么东西.Foo是

public T Foo<T>() where T: MyBaseClass, new() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

这当然会爆炸,因为外部定义的TResult与内部定义的T没有相同的类型限制.问题是:有没有办法让TResult适合Foo?我可以以某种方式明确测试这两个条件并强制类型变量吗?

c# generics

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

在没有指定实例类型的情况下,F#中是否存在对泛型类型进行类型测试的方法?

我正在尝试模式匹配我关心SQL生成的几种类型.理想情况下我想这样做:

let rec getSafeValue record (prop: PropertyInfo) = 
    match prop.GetValue(record, null) with
    | :? string as str -> "'" + str + "'"
    | :? Option<_> as opt -> 
        match opt with
        | Some v -> getSafeValue v prop
        | None -> "null"
    | _ as v -> v.ToString()
Run Code Online (Sandbox Code Playgroud)

问题是,在这里,类型参数Option<_>获取约束以匹配,record最终只是obj.

我知道我可以做一些基于反射的检查(检查它是一个通用类型,并且它是基于名称的选项类型),但我宁愿避免这种情况,如果可能的话.

f#

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