<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ws1296931325的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ws1296931325</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ws1296931325]]></copyright><item><title><![CDATA[一文说清OpenCL框架 ]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/149167776</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/149167776</guid><author>ws1296931325</author><pubDate>Mon, 07 Jul 2025 10:38:52 +0800</pubDate><description><![CDATA[OpenCL(Open Computing Language，开放计算语言）：从软件视角看，它是用于异构平台编程的框架；从规范视角看，它是异构并行计算的行业标准，由Khronos Group来维护；异构平台包括了CPU、GPU、FPGA、DSP，以及最近几年流行的各类AI加速器等；OpenCL包含两部分：1）用于编写运行在OpenCL device上的kernels的语言（基于C99）；2）OpenCL API，至于Runtime的实现交由各个厂家，比如Intel发布的。]]></description><category></category></item><item><title><![CDATA[nccl图]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/148877343</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/148877343</guid><author>ws1296931325</author><pubDate>Wed, 25 Jun 2025 13:26:51 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[OpenCL学习]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/148870871</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/148870871</guid><author>ws1296931325</author><pubDate>Tue, 24 Jun 2025 14:30:47 +0800</pubDate><description><![CDATA[如果event_wait_list 为空，则num_events_in_wait_list 必须为0。如果event_wait_list 不为空，则event_wait_list 所指向的event_wait_list 必须有效，且num_events_in_wait_list 必须大于0。在OpenCL的未来版本中，global_work_offset 可用于指定work_dim unsigned值的数组，这些值描述用于计算工作项的全局ID的偏移量，而不是让全局ID始终以偏移量（0，0，…]]></description><category></category></item><item><title><![CDATA[一文讲清 NCCL 集合通信原理与优化]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/148865503</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/148865503</guid><author>ws1296931325</author><pubDate>Tue, 24 Jun 2025 10:10:31 +0800</pubDate><description><![CDATA[我们知道，一旦我们的程序运行起来，它就会成为独立的进程。进程拥有独立的执行环境（内存、寄存器、程序计数器等），是操作系统中独立存在的可执行的基本程序单位。进程间相互独立（内存空间不相交），但是进程间可以相互交换信息。消息传递是指这些信息在进程间的相互交换，是实现进程间通信的唯一方式。最基本的消息传递操作包括发送消息send、接受消息receive、进程同 步barrier、归约reduction等。MPI 程序一般包含，变量定义，MPI 环境初始化, 执行进程间通信和退出MPI 环境。]]></description><category></category></item><item><title><![CDATA[RTP协议解析和H264码流提取]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/114995140</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/114995140</guid><author>ws1296931325</author><pubDate>Fri, 19 Mar 2021 08:07:23 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/davebobo/article/details/52994596
]]></description><category></category></item><item><title><![CDATA[RTP协议全解析（H264码流和PS流）]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/114994961</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/114994961</guid><author>ws1296931325</author><pubDate>Fri, 19 Mar 2021 07:48:34 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/chen495810242/article/details/39207305?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&amp;dist_request_id=&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blo]]></description><category></category></item><item><title><![CDATA[FU-A分包方式，以及从RTP包里面得到H.264数据和AAC数据的方法]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/114994924</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/114994924</guid><author>ws1296931325</author><pubDate>Fri, 19 Mar 2021 07:12:08 +0800</pubDate><description><![CDATA[RFC3984是H.264的baseline码流在RTP方式下传输的规范，这里只讨论FU-A分包方式，以及从RTP包里面得到H.264数据和AAC数据的方法。

1、单个NAL包单元

12字节的RTP头后面的就是音视频数据，比较简单。一个封装单个NAL单元包到RTP的NAL单元流的RTP序号必须符合NAL单元的解码顺序。
2、FU-A的分片格式
数据比较大的H264视频包，被RTP分片发送。12字节的RTP头后面跟随的就是FU-A分片：
FU indicator有以下格式：
 +--------...]]></description><category></category></item><item><title><![CDATA[了解实现一个高并发的内存池——TLS Memmory Pool]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/111363397</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/111363397</guid><author>ws1296931325</author><pubDate>Fri, 18 Dec 2020 14:41:57 +0800</pubDate><description><![CDATA[为什么需要内存池？

1.效率问题：如果我们直接向系统申请内存，当我们需要频繁的申请释放内存时，就需要频繁的与系统层产生交互，多次切换用户态和内核态，而用户态和内核态之间的切换的消耗是非常大的，因此申请内存的消耗就会很大，程序效率也就随之降低了。
2.内存碎片问题：如果我们频繁的申请和释放小块的内存，系统的内存就会因此被碎片化，虽然总的内存被占用并不多，但是却没有了连续的大块内存，这个时候如果我们需要使用大内存的空间时，就无法申请了。

实现一个高并发的内存

现在大部分的开发环境都是多核多线程，在申请内存]]></description><category></category></item><item><title><![CDATA[c++]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/111035058</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/111035058</guid><author>ws1296931325</author><pubDate>Fri, 11 Dec 2020 14:41:35 +0800</pubDate><description><![CDATA[1. 语言基础 (C/C++)

（0） 指针和引用的区别

指针是一个新的变量，指向另一个变量的地址，我们可以通过访问这个地址来修改另一个变量；而引用是一个别名，对引用的操作就是对变量的本身进行操作
	指针可以有多级，引用只有一级
	传参的时候，使用指针的话需要解引用才能对参数进行修改，而使用引用可以直接对参数进行修改
	指针的大小一般是4个字节，引用的大小取决于被引用对象的大小
	指针可以为空，引用不可以。
（1）在函数参数传递的时候，什么时候使用指针，什么时候使用引用？

需要返回函数内局部变量的内存]]></description><category></category></item><item><title><![CDATA[linux C/C++服务器后台开发面试题总结]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/108576191</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/108576191</guid><author>ws1296931325</author><pubDate>Mon, 14 Sep 2020 14:06:58 +0800</pubDate><description><![CDATA[、编程语言

1.根据熟悉的语言，谈谈两种语言的区别？

主要浅谈下C/C++和PHP语言的区别:

1)PHP弱类型语言，一种脚本语言，对数据的类型不要求过多，较多的应用于Web应用开发，现在好多互联网开发公司的主流web后台开发语言，主要框架为mvc模型，如smarty,yaf，升级的PHP7速度较快，对服务器的压力要小很多，在新浪微博已经有应用，对比很明显。

2)C/C++开发语言，C语言更偏向硬件底层开发，C++语言是目前为止我认为语法内容最多的一种语言。C/C++在执行速度上要快很多，毕竟其他类]]></description><category></category></item><item><title><![CDATA[linux操作系统常用面试题目]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/108471832</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/108471832</guid><author>ws1296931325</author><pubDate>Tue, 08 Sep 2020 16:38:30 +0800</pubDate><description><![CDATA[请描述一下用多线程怎么实现生产者消费者模型
		知道nginx的惊群现象吗？怎么解决？
		请说一下epoll的内核实现，都涉及哪些数据结构？
		select和epoll的区别？
		fork（）都会做哪些复制？
		什么是写时拷贝？Fork以后，父进程打开的文件指针位置在子进程里面是否一样？
		你项目中为什么使用进程池？而不是用线程池？不同场景怎么选择请列举一些例子！
		tcp/ip的四层协议，为什么要有传输层和网络层？
		tcp/ip三次握手和四次挥手过程以及信令流程，画出来！
		tcp三次握]]></description><category></category></item><item><title><![CDATA[【搞定计算机操作系统】面试题整理]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/108466962</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/108466962</guid><author>ws1296931325</author><pubDate>Tue, 08 Sep 2020 13:43:57 +0800</pubDate><description><![CDATA[一、进程与线程

1、简单说说进程、线程以及它们的区别

进程：是系统进行资源分配和调度的一个独立单位，是最小的资源管理单位。

线程：是进程的一个实体，是 CPU 调度和分派的基本单位，是最小的 CPU 执行单元。线程自己不拥有任何系统资源，但是它可以访问其隶属进程的全部资源。所以线程创建、撤销、切换的开销远小于进程，一个进程可以拥有多个线程。

2、进程的状态和转换



    三态模型：一个进程从创建而产生至撤销而消亡的整个生命周期，可以用一组状态加以划分，根据三态模型，进程的生命周期可分为如...]]></description><category></category></item><item><title><![CDATA[RTSP]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/108252955</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/108252955</guid><author>ws1296931325</author><pubDate>Thu, 27 Aug 2020 09:28:17 +0800</pubDate><description><![CDATA[https://github.com/daniulive/SmarterStreaming
]]></description><category></category></item><item><title><![CDATA[Linux——makefile编写]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/106144261</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/106144261</guid><author>ws1296931325</author><pubDate>Fri, 15 May 2020 16:10:35 +0800</pubDate><description><![CDATA[Linux——makefile编写



阅读目录

关于makefile
	make怎么执行
	makefile简化
	Makefile还有什么
以前对makefile的编写，限于刚开始接触，我都比较局限一些死板的格式，有时候就会显得有些繁琐。在进一步了解一些系统编译和链接的知识后，对makefile编写流程有了一些新的认识，所以来此梳理梳理，方便更为灵活地编写makefile。

限于makefile认识不足，这里参考了一篇比较好博文:makefile



点击回顶部

关于makefile

　　.]]></description><category></category></item><item><title><![CDATA[socket应用实例之RTP音频流传输]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/105660095</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/105660095</guid><author>ws1296931325</author><pubDate>Tue, 21 Apr 2020 15:53:07 +0800</pubDate><description><![CDATA[套接字的特性由3个属性确定，它们分别是：域、端口号、协议类型。
（1）套接字的域
它指定套接字通信中使用的网络介质，最常见的套接字域有两种：
一是AF_INET，它指的是Internet网络。当客户使用套接字进行跨网络的连接时，它就需要用到服务器计算机的IP地址和端口来指定一台联网机器上的某个特定服务，所以在使用socket作为通信的终点，服务器应用程序必须在开始通信之前绑定一个端口，服务器在指定...]]></description><category></category></item><item><title><![CDATA[视频流传输协议RTP/RTCP/RTSP/HTTP的区别]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/105581299</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/105581299</guid><author>ws1296931325</author><pubDate>Fri, 17 Apr 2020 15:21:29 +0800</pubDate><description><![CDATA[用一句简单的话总结：RTSP发起/终结流媒体、RTP传输流媒体数据、RTCP对RTP进行控制，同步。
之所以以前对这几个有点分不清，是因为CTC标准里没有对RTCP进行要求，因此在标准RTSP的代码中没有看到相关的部分。而在私有RTSP的代码中，有关控制、同步等，是在RTP Header中做扩展定义实现的。
另外，RFC3550可以看作是RFC1889的升级文档，只看RFC3550即可。
RTP...]]></description><category></category></item><item><title><![CDATA[RTP协议分析]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/105575874</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/105575874</guid><author>ws1296931325</author><pubDate>Fri, 17 Apr 2020 11:08:03 +0800</pubDate><description><![CDATA[RTP协议分析

第1章.RTP概述

1.1.RTP是什么

RTP全名是Real-time Transport Protocol（实时传输协议）。它是IETF提出的一个标准，对应的RFC文档为RFC3550（RFC1889为其过期版本）。RFC3550不仅定义了RTP，而且定义了配套的相关协议RTCP（Real-time Transport Control Protocol，即实...]]></description><category></category></item><item><title><![CDATA[写一个检测网线是否被拔出的守护进程（嵌入式设备上）]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/105246883</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/105246883</guid><author>ws1296931325</author><pubDate>Wed, 01 Apr 2020 15:21:22 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;signal.h&gt;
#include &lt;sys/file.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;linux/if.h&gt;
#include &l...]]></description><category></category></item><item><title><![CDATA[通过虚函数表访问基类的私有虚函数]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/104258141</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/104258141</guid><author>ws1296931325</author><pubDate>Tue, 11 Feb 2020 08:57:21 +0800</pubDate><description><![CDATA[#include &lt;iostream.h&gt;
class person
{
public:
virtual void name()
{
cout&lt;&lt;"A::name"&lt;&lt;endl;
}
private:
virtual void sex()
{
cout&lt;&lt;"A::sex"&lt;&lt;endl;
}
};
class student:public ...]]></description><category></category></item><item><title><![CDATA[编写类String的构造函数、析构函数和赋值函数(转载)]]></title><link>https://blog.youkuaiyun.com/ws1296931325/article/details/104258044</link><guid>https://blog.youkuaiyun.com/ws1296931325/article/details/104258044</guid><author>ws1296931325</author><pubDate>Tue, 11 Feb 2020 08:32:53 +0800</pubDate><description><![CDATA[请编写String的上述4个函数。

C++代码





//普通构造函数 
String::String(const char *str) 
{ 
        if(str==NULL) 
        { 
                m_data = new char[1]; // 得分点：对空字符串自动申请存放结束标志'\0'的//加分点：对m_data加NULL 判断 ...]]></description><category></category></item></channel></rss>