水军很多啊

[已注销] 评论 Linux多线程服务端编程 1 2013-06-18 09:02:14
Marvin
Marvin (没事···没事····) 2013-09-02 11:33:24

不明觉厉

作者应该出来解释一下嘛。。。

HuyoUSiTa
HuyoUSiTa 2013-09-06 11:41:19

请问libuv库对初学者学习怎么样?或者还是要看boost的asio库呢?

飞冰
飞冰 2013-10-18 22:06:10

muduo应该是作者初学时开始写的吧?感觉像是零散功能的累积,缺少整体设计。

fffvvvzz
fffvvvzz 2013-10-20 08:49:26

没看书,随便看了下在googlecode上的源代码,感觉作者属于玩票性质的。
1.的确像楼主说的那样,作者对信号不熟悉,epoll_wait出错后连EINTR都没判断
2.作者对多线程也不熟悉,线程的quit_变量,连volatile修饰也没有
只能说程序正好能运行起来,但是达不到可靠,更不用说是库级别的了
结论:1.作者真敢写 2.豆瓣水军多或读者层次低

haohaolee
haohaolee (时间就像海绵体的水) 2013-11-14 00:49:59

ls,虽然我对muduo不熟悉,但是多线程变量要加volatile修饰,这已经是老皇历了

离开以后
离开以后 (芝华塔尼欧) 2014-02-04 17:38:53

这都是这些什么理由啊,要黑一样东西也请黑得有点水平好吧。

1. timefd和signalfd。
linux提供新的timefd和signalfd的初衷,就是想通过select/poll/epoll来统一事件处理方式。既然有降低开发难度的API,为什么还要绕道去使用不好用的?像POSIX signal API这种,在多线程环境下会极大增加开发难度的东西,为什么不能用一个signalfd一笔带过?
至于说“在此我想问问各位做网络应用的同学,在你的实际项目中,不用POSIX的signal接口而用signalfd的,有几个?”这个,我只想说,去看看BSD的kqueue好吧。
如果看过boost.asio的源码的话,会发现ASIO虽然没有用signalfd,但timer的实现却是用了timerfd。当然,楼主也可以说ASIO也很渣,这我无话可说。

2. 用std::set保存timer queue。
"muduo还采用了set来保存event,每个big loop里要查超时的时候,再iterate一遍这个set。" 这个说明了楼主根本就没看懂timer queue的实现。timer queue是一个按timer先后顺序排序的一个集合,设置timerfd时,只需要设置queue的第一个事件,触发timer事件时也只需要取出queue里第一个operation来执行,根本不需要iterate整个set。只是插入时会慢一点,但通常timer queue的实现都会用二叉排序树来管理timer queue,所以插入时也不会有太大的影响。
而且这种方式已经是业界标准做法了好吧,libuv实现且使用了RB_XXX宏,ASIO在timer_queue.hpp中自己用双向链表和std::vector实现了二叉排序树,而muduo使用std::set却恰恰是最易理解且不损失效率的方式,因为std::set文档很清楚地说了,“Sets are usually implemented as red-black trees."

至于说用muduo跑带超时的10万个连接,我没用过muduo,不能臆测。但我能肯定的是,即使是muduo不能,也绝对不会是楼主所描述的理由。

另外像楼上那位fffvvvzz,水平渣得不一般,居然妄图用volatile管理多线程里的共享变量,已经被批成渣的东西了好吧,就这水平也好意思说作者对多线程不熟悉,你才是真敢写啊。

gavinsun2008
gavinsun2008 2014-02-12 17:10:17

要想学会高并发网络编程,kernel的system call是必须要会的;这之后其实用c可以很简单高效的实现高并发,nginx就是这么做的。
而muduo采用的c++,隐藏了kernel的system call,还引入了c++自身的复杂性,让人很难去捕捉到真正的实质。
本书作为c++学习教程其实是更合适的...

slade
slade 2014-05-28 22:52:38

顶 离开以后

嘿嘿嘿嘿
嘿嘿嘿嘿 2014-07-15 10:36:12

看似写得很犀利,楼主还是给个profile来说明吧。 自己实现一个,或者用开源库对比一下。talk is cheap, show me the code!

曙光
曙光 2014-07-16 09:52:28

这本书的重点并不是muduo实现的好不好,而是作者服务端的经验之谈,重点都弄错了,还怪书不好,绝对没看过书,然后跑过来谈muduo如何不好不好。

枕边人
枕边人 2014-08-17 10:35:52

都有道理啊

skyline09
skyline09 2014-09-25 11:26:48

多线程变量要加volatile修饰.....呵呵

听雨斋人
听雨斋人 (保持淡定是面对烦恼前的第一要则) 2014-11-04 22:41:17

楼主听出来很厉害的样子。但楼主有更好的适合初学者的书推荐吗?

macrosea
macrosea 2014-11-20 11:10:27

mark

13997657981
13997657981 2015-04-28 18:13:33

我现在正在看这本书,还没看完,但据目前是看的觉得这本书还是不错的,主要作者的经验之谈,很有参考价值。而这个库其实应该只是教学研究用,介绍一些原理性的东西。总之这本书还不错,值得去读。
这个评述者倒是有点傻逼。。。

dsfdHOUGHuhjdhf
dsfdHOUGHuhjdhf 2015-11-14 14:18:32

傻逼

panzg123
panzg123 2016-01-04 08:45:53

顶 离开以后

LoveEcho
LoveEcho 2016-05-17 15:45:55

lz的这种喷法我不同意。我有项目在用,起码现在看来,muduo在它说的特定应用场景中,性能并不是问题。而且在我看来,作者的代码问题不是很大。虽然作者代码中有很多unsafe的FIXME,但是并不能掩盖它的优点。
作者也说过适用场景,并且作者的出发点也是一个特定平台的好用,易用的网络库。而且作者之前在摩根斯坦利公司上班,现在在谷歌上班,你觉得这样背景的人会不懂你说的那些问题?

lxyscls
lxyscls 2017-01-11 11:09:25

reorder, rmw, volatile也是然并卵

《Effective Modern C++》里面讲的很清楚

某某人
某某人 2017-02-17 13:59:24
这都是这些什么理由啊,要黑一样东西也请黑得有点水平好吧。 1. timefd和signalfd。 ... 这都是这些什么理由啊,要黑一样东西也请黑得有点水平好吧。 1. timefd和signalfd。 linux提供新的timefd和signalfd的初衷,就是想通过select/poll/epoll来统一事件处理方式。既然有降低开发难度的API,为什么还要绕道去使用不好用的?像POSIX signal API这种,在多线程环境下会极大增加开发难度的东西,为什么不能用一个signalfd一笔带过? 至于说“在此我想问问各位做网络应用的同学,在你的实际项目中,不用POSIX的signal接口而用signalfd的,有几个?”这个,我只想说,去看看BSD的kqueue好吧。 如果看过boost.asio的源码的话,会发现ASIO虽然没有用signalfd,但timer的实现却是用了timerfd。当然,楼主也可以说ASIO也很渣,这我无话可说。 2. 用std::set保存timer queue。 "muduo还采用了set来保存event,每个big loop里要查超时的时候,再iterate一遍这个set。" 这个说明了楼主根本就没看懂timer queue的实现。timer queue是一个按timer先后顺序排序的一个集合,设置timerfd时,只需要设置queue的第一个事件,触发timer事件时也只需要取出queue里第一个operation来执行,根本不需要iterate整个set。只是插入时会慢一点,但通常timer queue的实现都会用二叉排序树来管理timer queue,所以插入时也不会有太大的影响。 而且这种方式已经是业界标准做法了好吧,libuv实现且使用了RB_XXX宏,ASIO在timer_queue.hpp中自己用双向链表和std::vector实现了二叉排序树,而muduo使用std::set却恰恰是最易理解且不损失效率的方式,因为std::set文档很清楚地说了,“Sets are usually implemented as red-black trees." 至于说用muduo跑带超时的10万个连接,我没用过muduo,不能臆测。但我能肯定的是,即使是muduo不能,也绝对不会是楼主所描述的理由。 另外像楼上那位fffvvvzz,水平渣得不一般,居然妄图用volatile管理多线程里的共享变量,已经被批成渣的东西了好吧,就这水平也好意思说作者对多线程不熟悉,你才是真敢写啊。 ... 离开以后

muduo也并不是取timer queue中第一个事件,而是copy 第一个事件和当前时间之间的事件。因为可能会有多个事件同时触发。

安德尔斯
安德尔斯 (精神分裂状的游走~~) 2018-04-28 14:18:48

楼主黑的水平简直渣到家了,唉