V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  deal11  ›  全部回复第 1 页 / 共 1 页
回复总数  8
2022-09-13 11:53:13 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
所谓系统级的异步 API, 目前已知:iocp 和 io_uring 吧
2022-09-06 16:20:08 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
@deal11 看 yasio 的源码,正是使用的 select + nonblocking socket 多路 io 复用模型,select api 几乎可以跨所有操作系统平台。
2022-09-06 16:12:41 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
我猜题主之所以关注到 yasio ,是因为该库 github 标题提到: "any client applications"
2022-09-06 00:45:55 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
@deal11 YOPT_S_NO_NEW_THREAD
2022-09-06 00:43:48 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
O_NONBLOCK + std::thread 算不上“不错”,这句话有误导。任何程序都离不开线程,libuv,asio 等离开 thread 也啥都干不了,任何进程至少有一个线程不是。std::thread 只是一种封装接口。看 yasio 文档,可以通过 YOPT_S_NO_THREAD 禁用内部创建线程,这样,所有网络消息和事件都在 io_service.run 调用者线程执行,至于这个线程是进程主线程还是其他线程,就取决于用户业务了。

tips: asio 的多路 io 复用模型 backend 也有 select 的实现,只是默认都用各平台高并发模型 epoll/kequeue/iocp/io_uring ,但可通过编译选项禁用他们,然后 fallback 到 select
2022-09-06 00:33:04 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
当然,线程+阻塞 socket 也能实现异步,但线程资源更昂贵,这也是个各操作系统提供类似 epoll/kqueue/iocp/io_uring/select/poll+非阻塞 socket 多路 io 复用模型的原因。
2022-09-06 00:27:31 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
游戏里的处理耗时事务,例如大量资源加载,分帧加载也是实现异步的一种思路,可有效避免界面卡顿。
不管是 iocp/epoll 等,还是 select/poll 都是实现多路 io 复用模型的方式,只是前者适用于实现高并发的服务器,后者多数情况下更适合适用于客户端,但无论如何,离开 nonblocking io(socket),高并发是空谈,异步 io 也是空谈。
2022-09-06 00:02:25 +08:00
回复了 justanetizen 创建的主题 程序员 推荐一个不错的 Cplusplus 网络库
异步只是结果或效果,epoll/kqueue/io_uring/iocp/poll/select+非阻塞 socket 可以实现,线程+阻塞 socket 也可以实现,协程也可以实现
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1546 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 17:00 · PVG 01:00 · LAX 10:00 · JFK 13:00
Developed with CodeLauncher
♥ Do have faith in what you're doing.