标签: proc

proc,Proc.new,lambda和stabby lambda之间的速度差异

Procs和lambdas 在方法范围和关键字的影响方面有所不同return.我对它们之间的性能差异很感兴趣.我写了一个测试,如下所示:

def time(&block)
  start = Time.now
  block.call
  p "that took #{Time.now - start}"
end
def test(proc)
  time{(0..10000000).each{|n| proc.call(n)}}
end
def test_block(&block)
  time{(0..10000000).each{|n| block.call(n)}}
end
def method_test
  time{(1..10000000).each{|n| my_method(n)}}
end

proc1 = Proc.new{|x| x*x}
proc2 = proc{|x| x*x}
lam1 = lambda{|x| x*x}
lam2 = ->x{x*x}

def my_method(x)
  x*x
end

test(proc1)
test(proc2)
test(lam1)
test(lam2)
test_block{|x| x*x}
test(method(:my_method))
method_test
Run Code Online (Sandbox Code Playgroud)

此代码的结果如下所示.

"that took 0.988388739"
"that took 0.963193172"
"that took 0.943111226"
"that took 0.950506263"
"that took 0.960760843"
"that took 1.090146951"
"that …
Run Code Online (Sandbox Code Playgroud)

ruby performance lambda proc

8
推荐指数
1
解决办法
2921
查看次数

解释/ proc/[id]/mountstats或/ proc/self/mountstats中的数据

我想监视我的NFS共享的IO.有很多程序正在解释/proc/[id]/mountstats([id] = nfs客户端/服务器的id)或/proc/self/mountstats.问题是,这些程序每秒计算一些IO.这在命令行中非常好用,但对我的监控解决方案来说却毫无用处.所以我想解释mountstats自己的反击.我现在的问题是,我需要一些mountstats针对nfs v4的文档.

到目前为止,我的搜索没有提出任何有用的.

谢谢你的帮助

Ubuntu(nfs客户端)上/ proc/self/mountstats的示例输出:

...
device IPADRESS:/mountpoint mounted on /mnt/mountpoint with fstype nfs4 statvers=1.0
    opts:   rw,vers=4,rsize=1048576,wsize=1048576,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys
    age:    77663
    caps:   caps=0x1e,wtmult=512,dtsize=4096,bsize=0,namelen=255
    nfsv4:  bm0=0xfdffbfff,bm1=0xf9be3e,acl=0x3
    sec:    flavor=1,pseudoflavor=1
    events: 1462723 25756220 1025148 1164028 1083099 2027020 31347107 1984730 279773 1915700 1346583 21077199 520498 31825 525298 39026 2180470 1083041 0 16822 990144 11011 0 0 0
    bytes:  46686144592 3990939437 0 0 30238687174 3759616491 7739053 1346583
    RPC iostats version: 1.0  p/v: 100003/4 (nfs)
    xprt:   tcp …
Run Code Online (Sandbox Code Playgroud)

linux bash proc

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

如何将方法或lambda转换为非lambda proc

如下面的ruby示例所示,我不能lambda使用Proc从a创建的错误数量的参数调用,Method因为它对参数的数量是严格的:

# method with no args
def a; end

instance_eval(&method(:a))
# ArgumentError: wrong number of arguments (1 for 0)

method(:a).to_proc.call(1, 2, 3)
# ArgumentError: wrong number of arguments (3 for 0)

method(:a).to_proc.lambda?
# => true
Run Code Online (Sandbox Code Playgroud)

我如何得到一个Proc不是来自一个Proc或来自一个lambda的lambda Method

ruby lambda proc

7
推荐指数
1
解决办法
2734
查看次数

其中m flag和o flag将存储在Linux中

我想知道最近收到的路由器广告的m标志和o标志的值.从内核源代码我知道存储了m标志和o标志.

  /*
   * Remember the managed/otherconf flags from most recently
   * received RA message (RFC 2462) -- yoshfuji
  */
  in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED |
                          IF_RA_OTHERCONF)) |
                          (ra_msg->icmph.icmp6_addrconf_managed ?
                                   IF_RA_MANAGED : 0) |
                           (ra_msg->icmph.icmp6_addrconf_other ?
                                   IF_RA_OTHERCONF : 0);
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

然后我相信必须能够使用ioctl或proc文件系统或任何其他方法检索这些值.任何人都可以指出这一点.

linux kernel ipv6 netlink proc

7
推荐指数
1
解决办法
872
查看次数

为什么带有splat参数的Ruby procs/blocks的行为与方法和lambda不同?

为什么Ruby(2.0)使用splat参数处理/块的行为与方法和lambda不同?

def foo (ids, *args)
  p ids
end
foo([1,2,3]) # => [1, 2, 3]

bar = lambda do |ids, *args|
  p ids
end
bar.call([1,2,3]) # => [1, 2, 3]

baz = proc do |ids, *args|
  p ids
end
baz.call([1,2,3]) # => 1

def qux (ids, *args)
  yield ids, *args
end
qux([1,2,3]) { |ids, *args| p ids } # => 1
Run Code Online (Sandbox Code Playgroud)

以下是对此行为的确认,但没有解释:http: //makandracards.com/makandra/20641-careful-when-calling-a-ruby-block-with-an-array

ruby lambda block splat proc

7
推荐指数
1
解决办法
2117
查看次数

Python yield(从Ruby迁移):如何在没有参数的情况下编写函数,并且只能使用yield进行打印?

我一直在将Ruby代码转换为Python代码,现在我坚持使用包含以下内容的函数yield:

def three_print():
    yield
    yield
    yield
Run Code Online (Sandbox Code Playgroud)

我想调用该函数并告诉它打印"Hello"三次,因为这三个yield语句.由于函数不接受任何参数,我得到一个错误.你能告诉我最简单的方法吗?谢谢.

ruby python yield generator proc

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

如何在/ proc中显示文件的大小?它不应该是零大小

从下面的消息中,我们知道文件/ proc/sys/net/ipv4/ip_forward中有两个字符,但为什么ls只是显示这个文件的大小为零?

我知道这不是磁盘上的文件,而是内存中的文件,所以有没有命令可以看到/ proc中文件的实际大小?

root@OpenWrt:/proc/sys/net/ipv4# cat ip_forward | wc -c
2
root@OpenWrt:/proc/sys/net/ipv4# ls -l ip_forward
-rw-r--r--    1 root     root            0 Sep  3 00:20 ip_forward
root@OpenWrt:/proc/sys/net/ipv4# pwd
/proc/sys/net/ipv4 
Run Code Online (Sandbox Code Playgroud)

linux ls file filesize proc

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

我可以对传递给方法的块强制执行arity吗?

有没有办法"打开"使用Proc.new或实例化的Proc的严格的arity强制执行Kernel.proc,以便它的行为类似于Proc实例化的lambda

My initialize method takes a block &action and assigns it to an instance variable. I want action to strictly enforce arity, so when I apply arguments to it later on, it raises an ArgumentError that I can rescue and raise a more meaningful exception. Basically:

class Command
  attr_reader :name, :action

  def initialize(name, &action)
    @name   = name
    @action = action
  end

  def perform(*args)
    begin
      action.call(*args)
    rescue ArgumentError
      raise(WrongArity.new(args.size))
    end
  end
end

class WrongArity < …
Run Code Online (Sandbox Code Playgroud)

ruby lambda proc

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

读取proc stat信息

您好,我需要有关具有某些 PID 的进程的以下信息:

名称、ppid、状态、#ofOpenFiles、#ofThreads

我知道 /proc/pid/stat 文件的示例如下:

15(看门狗/1) S 2 0 0 0 -1 69239104 0 0 0 0 0 69 0 0 -100 0 1 0 6 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 1844674407370 9551615 0 0 17 1 99 1 0 0 0 0 0 0 0 0 0 0 0

我当前尝试解析此类文件:

FILE *fp;
           char buff[255];
           fp= fopen("/proc/123/stat", "r");
           if(fp == NULL){

           }else{

             fscanf(fp, "%d %s %c %d %d %d %d %d …
Run Code Online (Sandbox Code Playgroud)

c unix pid stat proc

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

符号链接和to_proc

众所周知,Rubyist &会调用to_proc一个符号,所以

[:a, :b, :c].map(&:to_s)
Run Code Online (Sandbox Code Playgroud)

相当于

[:a, :b, :c].map { |e| e.to_s } # => ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

假设我想立即调用另一个方法to_s,这两个实现将起作用:

[:a, :b, :c].map { |e| e.to_s.upcase }
[:a, :b, :c].map(&:to_s).map(&:upcase)
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法& Symbol#to_proc在一个参数中链接调用?就像是:

[:a, :b, :c].map(&:to_s:upcase)
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby symbols proc

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

标签 统计

proc ×10

ruby ×6

lambda ×4

linux ×3

bash ×1

block ×1

c ×1

file ×1

filesize ×1

generator ×1

ipv6 ×1

kernel ×1

ls ×1

netlink ×1

performance ×1

pid ×1

python ×1

splat ×1

stat ×1

symbols ×1

unix ×1

yield ×1