2017-09-26 15:18
⁄ 工业·编程
⁄ 共 530字
最近开始复习和深入学习C和C++的知识,陆陆续续查了很多库函数的实现方式;最好的学习方式莫过于分析和学习经典的C和C++的库函数的实现方式了,这样自己以后使用起来也会更加的得心应手;由于相关资料其实还比较分散;故近期创建了连个博文分类,分别解析C的库函数(glibc经典源码分析)和C++的库函数(stdlibc++经典源码分析);先从常用的和简单的函数实现开始吧,希望能够学到不少经验;
1 glibc源码路径:
官方网址: http:...
GCC, glibc, libstdc阅读全文
2017-09-19 12:33
⁄ 工业·编程
⁄ 共 2993字
RTC(Real-time Communications),实时通信,是一个正在兴起的风口行业,经过短短一年的时间,已经有很多玩家进入了这个行业,最典型的应用就是直播连麦和实时音视频通信。但是,很多开发者对一些概念还是有混淆的,比如RTC与WebRTC,RTC与直播,RTC与IM。
一、RTC和WebRTC有什么区别?
实时通信(RTC)最容易和WebRTC混淆,实际上,二者不能划等号。
RTC从功能流程上来说,包含采集、编码、前后处理、传输、解码、缓冲、渲染...
WebRTC阅读全文
2017-09-12 06:43
⁄ 工业·编程
⁄ 共 6903字
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和...
linux, 区别阅读全文
2017-09-05 06:22
⁄ 工业·编程
⁄ 共 3687字
1、C10K问题的由来
大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多,一台服务器同时在线100个用户估计在当时已经算是大型应用了,所以并不存在什么 C10K 的难题。互联网的爆发期应该是在www网站,浏览器,雅虎出现后。最早的互联网称之为Web1.0,互联网大部分的使用场景是下载一个HTML页面,用户在浏览器中查看网页上的信息,这个时期也不存在C10K问题。
Web2.0时代...
网络编程阅读全文
2017-08-29 06:06
⁄ 工业·编程
⁄ 共 3626字
对笔者而言,这是一个挺新的领域,比较有意思。
一、解释名词:
NFV(Network Function Virtualization):通过使用x86等通用性硬件以及虚拟化技术,来承载很多功能的软件处理。从而降低网络昂贵的设备成本。 这项技术的目的在于软硬件的解耦合,让网络设备功能不再依赖于底层硬件,为啥呢,因为硬件研发周期长,贵啊。
DPDK(Intel Data Plane Development Kit):Intel数据面开发包,它是一组快速处理数据包的开发平台接口...
DPDK, 网络编程阅读全文
2017-08-22 06:14
⁄ 工业·编程
⁄ 共 2004字
一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见。本文阐述了Linux环境下的几种主要进程 间通信手段,并针对每个通信手段关键技术环节给出详细实例。为达到阐明问题的目的,本文还对某些通信手段的内部实现机制进行了分析。
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做 出重大贡献的两大主力AT&a...
IPC, linux, 网络编程阅读全文
2017-08-15 06:09
⁄ 工业·编程
⁄ 共 236字
sysv是早期实践中弄出来的,posix是后来标准化之后的产物。这个导致了posix的接口设计更加严谨完善,但特殊情况下处理消息不及sysv灵活
posix ipc的那套接口做到了线程安全,sysv的就不见得了
如果你只考虑在linux上开发,就选posix那套就行了,还能和select/poll这些好东西一起用
如果还要考虑其他平台的兼容性,那就具体情况具体分析了,有些平台上有些库对posix实现的完整程度还不如sysv。
具体可参考《UNIX网络编程 卷2:进...
网络编程阅读全文
2017-08-08 17:59
⁄ 工业·编程
⁄ 共 1558字
1、协程是什么?
(1)线程
每一个线程都代表一个执行序列。当我们在程序中创建多线程的时候,看起来,同一时刻多个线程是同时执行的,不过实质上多个线程是并发的,因为只有一个CPU,所以实质上同一个时刻只有一个线程在执行。在一个时间片内执行哪个线程是不确定的,我们可以控制线程的优先级,不过真正的线程调度由CPU的调度决定。
(2)协程
协程跟线程都代表一个执行序列。不同的是,协程把线程中不确定的地方尽可能的去掉...
协程阅读全文
2017-08-01 16:03
⁄ 工业·编程
⁄ 共 4048字
在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题,即会出现竞争条件。为了解决多个线程对同一变量访问时的竞争条件问题,操作系统层面提供了锁、信号量、条件变量等几种线程同步机制。如果对变量的每次访问都使用上述机制,由于系统调用会陷入内核空间,需要频繁的进行上下文切换,这就导致了程序的时间开销比较大。
自然的,我们就想到,在多线程环境中,在某些情况下是否能减少甚至避免使用系统调用?...
多线程编程阅读全文
2017-07-25 15:40
⁄ 工业·编程
⁄ 共 4734字
libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦腰斩断”,这种在函数任意位置 “切出——恢复” 的功能是如何实现的呢?
本文从...
libco, 协程阅读全文