返回信息流群里有人在看muduo源码的吗?求组队
这是一条镜像帖。来源:北邮人论坛 / cpp / #91722同步于 2016/5/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
群里有人在看muduo源码的吗?求组队
MrLoser
2016/5/17镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我自学了一个多月的网络编程,想找一个开源库学习一下,有什么好推荐的么?
【 在 nuanyangyang 的大作中提到: 】
: 讨厌陈硕。他完全不理解什么叫“未定义行为”,而且不理解“语言律师”做出的努力。
基本的网络编程知识还是需要懂的吧?比如阻塞 非阻塞 多线程 单线程 多进程之类的
【 在 wl20151308 的大作中提到: 】
: 同想看,问一下看之前需不需要看一遍UNP?
【 在 MrLoser 的大作中提到: 】
: 我自学了一个多月的网络编程,想找一个开源库学习一下,有什么好推荐的么?
你想学习哪个层次的呢?比如Spring Web也算“网络”编程,Netty也算“网络”编程,SSH也算一个“网络”程序,Avahi也算“网络”程序。但它们很不一样。你希望了解那种呢?比如:
- 偏向系统还是偏向应用?比如,是对操作系统内核内部的实现感兴趣呢?还是操作系统内核的接口?还是POSIX的接口?(POSIX是一个标准,只提供C语言层次上的接口,和具体的内核(比如Linux)没有直接的关系,Linux(确切地说是glibc)碰巧提供了POSIX接口)还是高级语言提供的更加友好、更适合处理应用程序的需求的机制?
- 你喜欢什么语言呢?C?还是别的语言,比如C++/Java/Python/Erlang...
- 什么协议?http?tcp?ssh?zeroconf?tftp?dns?icmp?
- 服务器端还是客户端?
- 注重什么?清晰、可读?还是支持大量并发客户端?
额,具体来说,TCP HTTP感兴趣一点,比较擅长C++,其实muduo我觉得还行,就是我编译成功不了...
【 在 nuanyangyang 的大作中提到: 】
:
: 你想学习哪个层次的呢?比如Spring Web也算“网络”编程,Netty也算“网络”编程,SSH也算一个“网络”程序,Avahi也算“网络”程序。但它们很不一样。你希望了解那种呢?比如:
: - 偏向系统还是偏向应用?比如,是对操作系统内核内部的实现感兴趣呢?还是操作系统内核的接口?还是POSIX的接口?(POSIX是一个标准,只提供C语言层次上的接口,和具体的内核(比如Linux)没有直接的关系,Linux(确切地说是glibc)碰巧提供了POSIX接口)还是高级语言提供的更加友好、更适合处理应用程序的需求的机制?
: ...................
【 在 MrLoser 的大作中提到: 】
: 额,具体来说,TCP HTTP感兴趣一点,比较擅长C++,其实muduo我觉得还行,就是我编译成功不了...
稍微看了一下,觉得依赖的工具有点旧。还在依赖GCC私有的扩展来进行原子内存操作(C++11已经有标准的做法),以及还在使用boost的shared_ptr(C++11有标准的而且更完善的unique_ptr和shared_ptr等),甚至连thread、threadlocal、mutex、都自己封装一套(C++11在语言级支持thread_local,标准库里thread和mutex)。如果你是为了学习人家的代码,那么起码这几点不应该学习。
然后看到下面这段代码,我心里千万只草泥马在奔腾:
bool looping_; /* atomic */
bool quit_; /* atomic and shared between threads, okay on x86, I guess. */
bool eventHandling_; /* atomic */
bool callingPendingFunctors_; /* atomic */
atomic你妹啊,还okay on x86……这就是“未定义行为”,就是“什么都可能发生,从什么都不发生到机器冒烟都可以发生”的。编译器心情一好,就把读写操作省略或者调换顺序了,而且看到quit_==true不一定能看到之前清理之后的结果。如果是在C++11还没出现之前这样写还可以原谅。毕竟那个时代C++写的任何多线程程序都是未定义行为(嗯,我对陈硕这样说过,他很不服气)。但现在C++11已经出现这么多年了,再这样写就要打屁股了。
还有
/// Quits loop.
///
/// This is not 100% thread safe, if you call through a raw pointer,
/// better to call through shared_ptr<EventLoop> for 100% safety.
void quit();
以及
quit_ = false; // FIXME: what if someone calls quit() before loop() ?
看样子作者本人也对自己的逻辑不是很清楚。编程序最忌讳的就是“not 100% safe”,既然自己都知道会出错,那肯定会出错的。
对啊,我看他的代码也很不习惯,因为我是直接学C11的,而且用的是STL...感谢还抽空看了一下代码再来回答我的问题,赞
【 在 nuanyangyang 的大作中提到: 】
:
: 稍微看了一下,觉得依赖的工具有点旧。还在依赖GCC私有的扩展来进行原子内存操作(C++11已经有标准的做法),以及还在使用boost的shared_ptr(C++11有标准的而且更完善的unique_ptr和shared_ptr等),甚至连thread、threadlocal、mutex、。如果你是为了学习人家的代码,那么起码这两点不应该学习。然后看到下面这段代码,我心里千万只草泥马在奔腾:
: [code=cpp]
: ...................
lz要不要组个队,我也在学网络编程....(腾讯录了后台的实习,只会最基本的概念),我的情况应该跟你描述自己的情况很像(c++,stl用的还行),要不要组个团?
【 在 MrLoser 的大作中提到: 】
: 群里有人在看muduo源码的吗?求组队