新手问题 请问一下可以动态扩展 pipe 缓冲区大小吗?另外问下 ruby 可以用共享内存作进程间通信么?

jy05874937 · 2018年07月12日 · 最后由 luikore 回复于 2018年07月18日 · 1104 次阅读

😎 😍 😍 😍 😎 😂 😂 😁 😁 😁 😁

  1. 视操作系统而定

  2. 可以,但都是调系统 API... shmget, GlobalAlloc 了解一下

做进程间通信,一般 socket 读写就可以了,建议 Unix Domain Socket

最好不要共享内存啦,想好用 0mq 了解一下,想快 cap'n proto 了解一下

luikore 回复

Unix Domain Socket 的话缓存也是 65536 和 pipe 是一样的把,如果我想缓存多该怎么做呢,另外我想问调用系统 API 是否需要与 C 做交互,那么需要栈来传递变量,这样会变得得不偿失。

要那么大的缓冲区干吗?应该在缓冲区满的时候暂停写入

jy05874937 回复

http://pubs.opengroup.org/onlinepubs/000095399/functions/setsockopt.html

Socket 可以设置 buffer 大小,SO_SNDBUF 和 SO_RCVBUF

是需要和 C 交互,但是 Ruby 给你包装好了:https://ruby-doc.org/stdlib-2.5.1/libdoc/socket/rdoc/BasicSocket.html#method-i-setsockopt

jy05874937 回复

程序不是这么优化的,你先 profile 一下看看是否真的慢和慢在哪里

需要 登录 后方可回复, 如果你还没有账号请 注册新账号