前言
最近要找工作,发现某美国硅片巨头正在招聘WebRTC相关开发工程师,非常感兴趣。所以决定深入研究一下WebRTC的源代码。
其实,前一阵子就下载过WebRTC的源代码,发现非常适合我的“口味”。这是我第一次看到在Linux系统上实现类似Win32风格的多线程编程。过去看到的有关Linux的书籍、教程一般都是仅仅介绍一些Posix标准的多线程例程和同步工具,例如pthread、mutex、条件变量等。虽然理解这些东西对我来说并不是一个问题,但是对于一个用惯了WaitForMultipleObjects的Win32程序员来说,实在有些不习惯。因此,在看到WebRTC源代码时,我就被它深深地吸引住了。既然,这次某硅片巨头提供WebRTC相关的工作,那就好好深入研究一下WebRTC的源代码,希望能够在面试的时候能用得着。
当然,需要提一下的是,WebRTC的代码并非一定是教科书般的范例。相反为了满足适应各种Linux版本的需求,WebRTC选择了最具广泛适应性的Linux API来实现。比如在physicalsocketserver.h中PosixSignalHandler类的上面有一段注释:
// These two classes use the self-pipetrick to deliver POSIX signals to our
// select loop. This is the only safe,reliable, cross-platform way to do
// non-trivial things with a POSIX signalin an event-driven program (until
// proper pselect() implementations becomeubiqu