据我所知,Actor模型是一种关于并发的理论.Erlang和Scala都实现了这个理论模型,但它们的实现都没有完全符合Actor模型.
从计算机科学家的角度来看,Erlang,Scala中的"Actor"概念和理论模型之间有什么区别?
Go 1.7 beta 1今天早上发布,这是Go 1.7的发行说明草案.KeepAlive包中添加了一个新功能runtime.该文件runtime.KeepAlive给出了一个例子:
type File struct { d int }
d, err := syscall.Open("/file/path", syscall.O_RDONLY, 0)
// ... do something if err != nil ...
p := &FILE{d}
runtime.SetFinalizer(p, func(p *File) { syscall.Close(p.d) })
var buf [10]byte
n, err := syscall.Read(p.d, buf[:])
// Ensure p is not finalized until Read returns.
runtime.KeepAlive(p)
// No more uses of p after this point.
Run Code Online (Sandbox Code Playgroud)
该文件runtime.SetFinalizer还给出了一个解释runtime.KeepAlive:
例如,如果p指向包含文件描述符d的结构,并且p具有关闭该文件描述符的终结器,并且如果函数中最后一次使用p是对syscall.Write的调用(pd,buf,size ),一旦程序进入syscall.Write,则p可能无法访问.终结器可能会在那一刻运行,关闭pd,导致syscall.Write失败,因为它正在写入一个已关闭的文件描述符(或者更糟糕的是,由一个不同的goroutine打开的完全不同的文件描述符).要避免此问题,请在调用syscall.Write之后调用runtime.KeepAlive(p).
令我感到困惑的是,变量 …
我想像这样使用我的脚本:
python test.py run
python test.py stop
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
parser = argparse.ArgumentParser()
command_group = parser.add_mutually_exclusive_group(required=True)
command_group.add_argument('run', help='run it', action='store_true')
command_group.add_argument('stop', help='stop it', action='store_true')
Run Code Online (Sandbox Code Playgroud)
当我执行它时,会引发异常:
ValueError: mutually exclusive arguments must be optional
Run Code Online (Sandbox Code Playgroud)
所以required=False当我添加每个参数时我尝试添加.然后我得到另一个例外:
TypeError: 'required' is an invalid argument for positionals
Run Code Online (Sandbox Code Playgroud)
我糊涂了.
我想阅读 BEAM VM 的指令集并了解其内部结构,但我在 google 上能找到的都已经过时了。
我读过的文档std::net和MIO,我已经找到了一些方法,如set_nodelay和set_keepalive,但我还没有找到一种方法来设置像其他套接字选项SO_REUSEPORT和SO_REUSEADDR一个给定的插座上.我怎样才能做到这一点?