为什么有很多出名开源的C/C++方面的高性能网络库,比如libevent,boost-asio,有些企业还要自己写?

为什么有很多出名开源的C/C++方面的高性能网络库,比如libevent,boost-asio,有些企业还要自己写?

 
 
 
 
我个人很倾向用著名的开源软件来完成功能需求,但是发现在实际开展中很多人会反对开源,而要求自己实现一套,我不知道是我考虑太少,还是他们太武断。
 

因为 KPI 的原因更多吧,除开少部分特殊的场景,asio/libevent 会不够用?

建议尽量使用通用方案,比如 C++项目尽量用 asio,C项目用 libevent(对比 libev 实现了自己的 buffer)。

理由就是,通用性强,稳定,功能够用。照前面的人说的,不要迷信什么大牛说的话,asio/libevent 各种被项目实实际际的上生产线,用真金白银来支持,综合水平肯定是很高的。

另外一点就是不分裂的库很容易衍生一些其他好用的功能,像在 Go 里面大家都基于 net.Conn 来做文章,接入一些三方网络库 cmux/smux 非常自然。这个在 C++ 做的很差,其实 asio 足够强大,完成这些功能很简单,就是因为不统一导致根本没人做。

顺便再吐槽一下陈硕的回答,高性能的前提是功能满足要求的,所谓软件工程没有银弹,5000行代码能实现多少功能?在 muduo 里面还包括了一套自己实现的线程/锁/条件变量/日志的逻辑?举个例子,muduo 在 listen 失败的时候直接打一条 fatal 日志这种骚操作看起来就是偷懒行为。都出现 fatal 日志了,理论这个服务就该停止了,如果我这个服务是一个动态监听的逻辑,那应该怎么处理?返回错误值或者抛异常是不是更好的选择(刚好 asio 都支持)?

posted on 2024-04-19 16:37  漫思  阅读(2)  评论(0编辑  收藏  举报

导航