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

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

😎 😍 😍 😍 😎 😂 😂 😁 😁 😁 😁

共收到 5 条回复
  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 一下看看是否真的慢和慢在哪里

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