自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 交叉引用造成内存丢失?动手试试吧

最近看了一些网上的文章各种详解、解剖Java GC,告诫我们要怎么避免内存丢失。我觉得很奇怪,.Net虚拟机已经多少年了,这种东西难道不应该虚拟机直接帮我们解决的吗?一时兴起,动手试了一下。果然结果如我所预料,我不知道过去的JVM是什么样,现在的应该是和.Net虚拟机一样先进了。废话少说,直接上代码:交叉引用:public class Main { public static

2017-08-02 11:33:15 815

原创 WebRTC源代码探索之旅——多线程篇(7 - 2)

7.2 范例代码1 这里先让我们看一段网上摘录的代码: #include #include #include "talk/base/thread.h" class HelpData : publictalk_base::MessageData{public: std::string info_;}; class Police : publictalk_base:

2014-08-16 16:03:10 1225

原创 WebRTC源代码探索之旅——多线程篇(6 - 3)

6.4 talk_base::AutoThread 该类是一个工具类,它的主要功能是临时封装一个线程。用户的应用程序自行调用了系统API创建了一个线程,而这条线程需要临时使用一下talk_base::Thread的功能,比如调用另一个线程talk_base::Thread::Send并阻塞等待另一条线程完成函数调用。是的,在talk_base::Thread中talk_base::Thre

2014-08-16 11:51:59 1361 1

原创 WebRTC源代码探索之旅——多线程篇(6 - 2)

6.3 talk_base::Thread talk_base::Thread的主要功能是封装线程,为线程提供消息队列和多路信号分离器的功能。需要注意的是,talk_base::Thread的绝大多数功能是talk_base::MessageQueue和talk_base::PhysicalSocketServer的代码提供的,仅有talk_base::Thread::Send函数的功能主

2014-08-16 10:59:45 1759

原创 WebRTC源代码探索之旅——多线程篇(8)

8 我们所学到Linux API 通过详尽地阅读WebRTC的线程模型代码,我们学到了以下这些Linux API是如何被实际应用的:pthread_mutex_init、pthread_mutex_destroy、pthrea_mutex_lock、pthread_mutex_trylock、pthread_mutex_unlock这5个函数可以完成对mutex的操作,基本上和Wi

2014-08-15 22:24:56 1106

原创 WebRTC源代码探索之旅——多线程篇(7 - 3)

7.3 范例代码2 范例代码1是一个单线程的例子,所以并不能够足以研究WebRTC在多线程环境下的工作情况。因此,在这个例子的基础上,我把它改良成了多线程的版本:#include #include #include "talk/base/thread.h" class HelpData : publictalk_base::MessageData{public:

2014-08-15 22:21:40 1163 1

原创 WebRTC源代码探索之旅——多线程篇(7 - 1)

7 实际使用WebRTC的线程模型 在这一章节我将实际演示如何将WebRTC的/trunk/talk/base目录下的所有文件编译成静态库。并且在这基础上编译运行2个小程序,以观察整个线程模型的调用关系。这将能够很好地帮助读者理解各个模块是如何协同工作的。 7.1 编译静态库 正如在本文开头时提到的,这一节的内容可能是大家最感兴趣的,但也是我不得不和大家说声抱歉的,我是在M

2014-08-15 22:17:46 1209

原创 WebRTC源代码探索之旅——多线程篇(6 - 1)

6 thread thread.h/thread.cc文件实现了WebRTC对系统线程的封装。它主要包括3个类talk_base::ThreadManager类、talk_base::Thread类和talk_base::Runnalbe类;以及几个工具类talk_base::AutoThread类、talk_base::ComThread类和talk_base::SocketServer

2014-08-15 20:33:18 1326

原创 WebRTC源代码探索之旅——多线程篇(5 - 4)

5.9 talk_base::PhysicalSocketServer 如果说talk_base::MessageQueue是多路信号分离器的外围,那么talk_base::PhysicalSocketServer就是多路信号分离器的真正核心。talk_base::PhysicalSocketServer主要实现了消息和IO的多路分发功能,类似于Windows平台上的WSAWaitForM

2014-08-15 17:22:03 2434

原创 WebRTC源代码探索之旅——多线程篇(5 - 3)

5.4 talk_base::PosixSignalHandler talk_base::PosixSignalHandler和talk_base::PosixSignalDispatcher这两个类只有Linux版本。并且在整个WebRTC的源代码中没有任何地方使用过这两个类。因此,对它们的代码分析主要是为了帮助Windows开发人员从实用的角度学习如何使用Linux平台下的部件。 

2014-08-15 17:17:12 1301

原创 WebRTC源代码探索之旅——多线程篇(5 - 2)

5.3 talk_base::EventDispatcher talk_base::EventDispatcher类实现了跨平台的等价于Win32自动重置(autoreset)WSAEvent的功能。在Windows平台上有网络多线程开发经验的读者应该很熟悉WSAEvent,我就不再多做介绍了。 我在1.1节讲解过talk_base::Event类。那talk_base::Phys

2014-08-15 17:11:52 1225 1

原创 WebRTC源代码探索之旅——多线程篇(5 - 1)

5 physicalsocketserver physicalsocketserver.h/physicalsocketserver.cc文件实现了一个基本的多路信号分离器。这个多路信号分离器的实现代码可以横跨Windows、Linux、OSX、Android、ios等平台,非常复杂。其实在/trunk/talk/base目录下,还有多个SocketServer的实现,从这些SocketS

2014-08-15 17:09:25 1704 2

原创 WebRTC源代码探索之旅——多线程篇(4 - 2)

4.4 talk_base::MessageQueue 现在我们正式进入多线程篇最为激动人心的部分——多路信号分离器的消息队列组件。WebRTC的多路型号分离器由2部分组成:消息队列和talk_base::SocketServer(主要实现就是talk_base::PhysicalSocketServer)。消息队列负责接受消息,并使用消息处理器(talk_base::MessageHan

2014-08-15 17:03:08 1739

原创 WebRTC源代码探索之旅——多线程篇(4 - 1)

4 messagequeue messagequeue.h/messagequeue.cc文件是多路信号分离器的重要组成部分。它实现了消息一个完整地消息队列,该队列包括立即执行消息队列、延迟执行消息队列和具有优先级的消息队列。其中,talk_base::MessageQueue类也是talk_base::Thread类的基类。所以,所有的WebRTC的线程都是支持消息队列的。 4.

2014-08-15 16:56:35 1471 1

原创 WebRTC源代码探索之旅——多线程篇(3)

3 messagehandler messagehandler.h/messagehandler.cc文件仅仅定义了talk_base::MessageHandler类,和一个模板工具类talk_base::FunctorMessageHandler类。 3.1 talk_base::MessageHandler talk_base::MessageHandler类的主要功

2014-08-15 16:54:06 1505

原创 WebRTC源代码探索之旅——多线程篇(2)

2 crticalsection criticalsection.h/criticalsection.cc文件中包含了3个类talk_base::CriticalSection、talk_base::CritScope和talk_base::TryCritScope。这3个类对于有多线程编程经验的Windows开发人员来说都是非常容易理解的。基本上就是对Win32 CriticalSect

2014-08-15 10:12:28 1392

原创 WebRTC源代码探索之旅——多线程篇(1)

随着CPU频率接近物理极限,多芯片、多核几乎成为了加速软件运行速度的唯一选择。与之相应地,多线程、异步编程以及并发编程成为了软件开发人员的必修课。因此,各种各样的开发框架不断涌现。在C++领域,boost的thread库等优秀的多线程框架也是其中的代表。特别是针对socket网络编程的boost.asio库可以轻松帮助开发人员实现多线程大量并发的网络服软件。 与这些框架相比,WebRTC的

2014-08-15 10:01:52 3418

原创 WebRTC源代码探索之旅(前言)

前言 最近要找工作,发现某美国硅片巨头正在招聘WebRTC相关开发工程师,非常感兴趣。所以决定深入研究一下WebRTC的源代码。 其实,前一阵子就下载过WebRTC的源代码,发现非常适合我的“口味”。这是我第一次看到在Linux系统上实现类似Win32风格的多线程编程。过去看到的有关Linux的书籍、教程一般都是介绍一些Posix标准的多线程例程和同步工具,例如signal、pth

2014-08-15 09:49:02 1775

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除