[问题] 关于 boost asio 的 thread 问题

楼主: yhn0tgb60 (呦厚厚)   2016-02-02 20:21:56
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
boost asio 1.60
我现在在用 boost asio 写 socket, 有执行绪的问题,
本来我打算分几个执行绪去作业,
收封包, 寄封包, 接连线, 然后每个使用者独立一个执行绪,
不过我后来发现 asio 本身就是 多执行绪的架构???
只要使用 io_service->post(), 和 async_XXXXX() 系列的function,
就会自动跑多执行绪???
所以其实我在 socket 的部分, 应该完全没有分执行绪的必要????
另外 本来我 send 不是即时的,
我会先都堆起来, 每个tick send一个固定的数量,
避免一次太多包要寄 会塞车,
(这意思不是单一封包太大, 是可以能非常多使用者, 同时在操作,
要寄很多不同的封包, 给不同的使用者)
不过如果 async_write 本身就是多执行绪在跑了,
等于每个资料 都是一个执行绪在处理???
那其实就也没有分批的必要了????
作者: Caesar08 (Caesar)   2016-02-02 22:04:00
我没用过boost的asio,但async这个字与thread是不相干的当然,他也有可能命名方式像<future>的async一样
作者: fr3ak (fr3@K)   2016-02-03 02:38:00
假设原 po 使用的 transport 是 TCP... 首先, 在 app 层做batch 几乎可以肯定是个坏主意, 特别是对 network 与 network programming 不熟的新手来说. 关键字 "tcp nagle nopush", 建议 google 一下再来, async I/O framework (asio included) 的 (worker) thread 是拿来做 computation 的 (特例先不谈), 而不是像传统的 multi process/thread 模型把 thread 拿来做 I/O multiplexing (以避免 I/O 卡住其他 computation 的进行)懒得打字了. 最后, 如果你的设计是一个使用者 (容我把它简化成一个 tcp connection) 配一个 thread, 其实没什么理由需要 async framework. 因为特定使用者的 I/O 不会把其他使用者的 computation 挡住 @@

Links booklink

Contact Us: admin [ a t ] ucptt.com