[问题] Linux Socket Performance

楼主: carylorrk (carylorrk)   2018-05-09 00:56:28
开发平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu 16.04
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc-5.5
问题(Question):
先承认这是作业文
小弟对网络程式不熟悉
第一次使用 Linux TCP socket 实作简单的 RPC
但是不知道是哪里的问题
performance 大概只有原本使用 gRPC 的一半
可能只是很蠢的操作方式错误
又或者是哪里 implement 太慢
还请各位鞭小力一点
整个系统的架构是
每台电脑之间都会互相沟通
主要程式部分是 multithread
可能会同步呼叫通讯部分的函式
并且每次传送数百 bytes 到 mega bytes 不等的内容
次数频繁,可能是一秒就好几次呼叫
通讯部分架构
我一开始就把每台之间的 socket 创好
用一个 bind & listen & accept 的 thread
加上 connet 到所有比自己后面的机器取得 sockets
并建立两个 thread 分别负责传送和接收(init.h)
传送的 thread 是一个 task queue
有人需要传送时先把资料加到 queue 里
这个 thread 就负责一直从 queue 里拿资料
然后利用 send 把资料传到对应 socket 去 (sender.cc)
接收的 thread 则是利用 epoll
来等待所有 sockets 的讯息进来
读进来之后会根据 command
创一个 thread call 相对应的 handler function (receiver.cc)
目前测量应该不是 serialize 方面的问题
也有试过在 receiver 创 thread 的部分使用 thread pool
但是暂时还没有找到效能的问题点
不知道有没有先进能给点意见?感谢~
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://gist.github.com/CaryLorrk/12726181cd3ebd79a1c6ccdedeb8c29f
不是完整的程式码
不过网络部分都有出来了
我知道架构很丑,伤眼了 XD
作者: Qbsuran (Qbsuran)   2018-05-09 17:28:00
实作建议threadpool可以用glib 事件处理可以用libevent

Links booklink

Contact Us: admin [ a t ] ucptt.com