<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hamlee67的博客]]></title><description><![CDATA[花未全开月未圆]]></description><link>https://blog.youkuaiyun.com/Hamlee67</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hamlee67]]></copyright><item><title><![CDATA[VSCode CMake build and debug C/C++ manual]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/121423712</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/121423712</guid><author>Hamlee67</author><pubDate>Fri, 19 Nov 2021 15:30:03 +0800</pubDate><description><![CDATA[一、platform

1、linux:
VScode
gcc
make
cmake

2、win10:
VScode
cmake
mingw64

二、VSCode CMake build and debug C/C++ devel environmet on windows

1、choco install(https://chocolatey.org/install)


cmd run：
@powershell -NoProfile -ExecutionPolicy Bypass -Command.]]></description><category></category></item><item><title><![CDATA[Google服务器架构解析]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/120947546</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/120947546</guid><author>Hamlee67</author><pubDate>Mon, 25 Oct 2021 10:38:43 +0800</pubDate><description><![CDATA[标签:Google,Linux,服务器架构

PS：Google，无疑是互联网时代最闪亮的明星。截止到今天为止，Google美国主站在Alexa排名已经连续3年第一，Alexa Top100中，各国的Google分站竟然霸占了超过20多个名额，不得不令人感叹Google的强大。不论何时，不论何地，也不论你搜索多么冷门的词汇，只要你的电脑连接互联网，只要你轻轻点击“google搜索”，那么这一切相关内容google都会在1秒钟之内全部搞定，这甚至比你查询“我的文档”都要快捷。这也就是为什么Google创...]]></description><category></category></item><item><title><![CDATA[Freeswitch Event Socket IVR外呼方案]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/106944198</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/106944198</guid><author>Hamlee67</author><pubDate>Wed, 24 Jun 2020 16:30:37 +0800</pubDate><description><![CDATA[一、项目应用解决方案

1、内呼方案流程：

客户拨号 &lt;——&gt; 运营商/网关 &lt;——&gt; FreeSWITCH(MRCP +ASR/TTS/NLP) &lt;——&gt;Lua(嵌入FS)

Ps: 根据特定号码，FS路由配置好的拨号计划(dialplan)，进而调用lua APP，Lua脚本的运行，实现业务逻辑控制，每一通电话都可以调用该lua脚本；

2、外呼方案流程：

Web(http) &lt;——&gt; Python(ESL) &lt;——&gt; FreeSWI...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——多线程实现多任务]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84398153</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84398153</guid><author>Hamlee67</author><pubDate>Thu, 26 Mar 2020 17:50:26 +0800</pubDate><description><![CDATA[概述
每个进程都拥有自己的数据段、代码段和堆栈段，这就造成进程在进行创建、切换、撤销操作时，需要较大的系统开销。为了减少系统开销，从进程中演化出了线程。为了让进程完成一定的工作，进程必须至少包含一个线程。线程存在于进程中，共享进程的资源。更多详情，请看《进程和线程的区别与联系》。

就像每个进程都有一个进程号一样，每个线程也有一个线程号。进程号在整个系统中是唯一的，但线程号不同，线程号只在它所属的...]]></description><category></category></item><item><title><![CDATA[MySQL中以日期为查询条件的方法]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/86009567</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/86009567</guid><author>Hamlee67</author><pubDate>Mon, 07 Jan 2019 16:21:57 +0800</pubDate><description><![CDATA[假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql：

 代码如下
			复制代码
		
			select * from product where add_time = '2013-01-12'
			
		对于这种语句，如果你存储的格式是YY-mm-dd是这样的，那么OK，如果你存储的格式是：2013-01-12 23:23:56这种格式...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——I/O多路复用select、poll、epoll使用的区别]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84841806</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84841806</guid><author>Hamlee67</author><pubDate>Wed, 05 Dec 2018 19:30:56 +0800</pubDate><description><![CDATA[I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术，使进程不阻塞于某个特定的 I/O 系统调用。

select()，poll()，epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制，可以监视多个描述符，一旦某个描述符就绪（一般是读就绪或者写就绪，就是这个文件描述符进行读写操作之前），能够通知程序进行相应的读写操作。但select()，poll()，e...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程调度浅析]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84820706</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84820706</guid><author>Hamlee67</author><pubDate>Wed, 05 Dec 2018 10:15:21 +0800</pubDate><description><![CDATA[概述
操作系统要实现多进程，进程调度必不可少。有人说，进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点，就像很多人动辄就说“某某函数比某某函数效率高XX倍”一样，脱离了实际环境，这些结论是比较片面的。 


而进程调度究竟有多重要呢？ 首先，我们需要明确一点：进程调度是对 TASK_RUNNING 状态的进程进行调度。如果进程不可执行（正在睡眠或其他），那么它跟进程调度没多大...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程管理]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84796960</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84796960</guid><author>Hamlee67</author><pubDate>Tue, 04 Dec 2018 19:12:50 +0800</pubDate><description><![CDATA[引言：

       在Linux的内核的五大组成模块中，进程管理模块时非常重要的一部分，它虽然不像内存管理、虚拟文件系统等模块那样复杂，也不像进程间通信模块那样条理化，但作为五大内核模块之一，进程管理对我们理解内核的运作、对于我们以后的编程非常重要。同时，作为五大组成模块中的核心模块，它与其他四个模块都有联系。下面就对进程模块进行想写的介绍，首先要了解进程及其相关的概念。其次介绍进程的创建、切...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程浅析]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84796864</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84796864</guid><author>Hamlee67</author><pubDate>Tue, 04 Dec 2018 19:07:13 +0800</pubDate><description><![CDATA[进程和线程的区别与联系
在许多经典的操作系统教科书中，总是把进程定义为程序的执行实例，它并不执行什么, 只是维护应用程序所需的各种资源，而线程则是真正的执行实体。

为了让进程完成一定的工作，进程必须至少包含一个线程。

进程，直观点说，保存在硬盘上的程序运行以后，会在内存空间里形成一个独立的内存体，这个内存体有自己的地址空间，有自己的堆，上级挂靠单位是操作系统。操作系统会以进程为单位，分配系统资...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程同步与互斥：System V 信号量]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84777440</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84777440</guid><author>Hamlee67</author><pubDate>Mon, 03 Dec 2018 19:02:01 +0800</pubDate><description><![CDATA[信号量概述信号量广泛用于进程或线程间的同步和互斥，信号量本质上是一个非负的整数计数器，它被用来控制对公共资源的访问。

编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限，当信号量值大于 0 时，则可以访问，否则将阻塞。PV 原语是对信号量的操作，一次 P 操作使信号量减１，一次 V 操作使信号量加１。

在实际应用中两个进程间通信可能会使用多个信号量，因此 System V 的信号量...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程同步与互斥：POSIX有名信号量]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84764246</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84764246</guid><author>Hamlee67</author><pubDate>Mon, 03 Dec 2018 14:44:51 +0800</pubDate><description><![CDATA[在 POSIX 标准中，信号量分两种，一种是无名信号量，一种是有名信号量。无名信号量一般用于线程间同步或互斥，而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似，无名信号量则直接保存在内存中，而有名信号量要求创建一个文件。前面我们学习了无名信号量的使用（详情请看《无名信号量》），这里我们学习有名信号量的使用。

 

1）创建一个有名信号量

所需头文件：

#includ...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程同步与互斥：POSIX 无名信号量]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84667022</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84667022</guid><author>Hamlee67</author><pubDate>Fri, 30 Nov 2018 19:50:36 +0800</pubDate><description><![CDATA[信号量概述
信号量广泛用于进程或线程间的同步和互斥，信号量本质上是一个非负的整数计数器，它被用来控制对公共资源的访问。

在 POSIX 标准中，信号量分两种，一种是无名信号量，一种是有名信号量。无名信号量一般用于线程间同步或互斥，而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似，无名信号量则直接保存在内存中，而有名信号量要求创建一个文件。

编程时可根据操作信号量值的结...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程同步与互斥：读写锁]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84581411</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84581411</guid><author>Hamlee67</author><pubDate>Wed, 28 Nov 2018 11:34:19 +0800</pubDate><description><![CDATA[读写锁基本原理
当有一个线程已经持有互斥锁时，互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形，当前持有互斥锁的线程只是要读访问共享资源，而同时有其它几个线程也想读取这个共享资源，但是由于互斥锁的排它性，所有其它线程都无法获取锁，也就无法读访问共享资源了，但是实际上多个线程同时读访问共享资源并不会导致问题。

在对数据的读写操作中，更多的是读操作，写操作较少，例如对数据库数据的读写应用。...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程同步与互斥：互斥锁]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84580925</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84580925</guid><author>Hamlee67</author><pubDate>Wed, 28 Nov 2018 11:16:17 +0800</pubDate><description><![CDATA[为什么需要互斥锁？
在多任务操作系统中，同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于，公司部门里，我在使用着打印机打印东西的同时（还没有打印完），别人刚好也在此刻使用打印机打印东西，如果不做任何处理的话，打印出来的东西肯定是错乱的。

下面我们用程序模拟一下这个过程，线程一需要打印“ hello ”，线程二需要打印“ world ”，不加任何处理的话，打印出来的内容会错乱：


...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——多任务的同步与互斥]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84571576</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84571576</guid><author>Hamlee67</author><pubDate>Tue, 27 Nov 2018 19:00:47 +0800</pubDate><description><![CDATA[现代操作系统基本都是多任务操作系统，即同时有大量可调度实体在运行。在多任务操作系统中，同时运行的多个任务可能：

都需要访问/使用同一种资源
	多个任务之间有依赖关系，某个任务的运行依赖于另一个任务
这两种情形是多任务编程中遇到的最基本的问题，也是多任务编程中的核心问题，同步和互斥就是用于解决这两个问题的。

互斥：是指散步在不同任务之间的若干程序片断，当某个任务运行其中一个程序片段时，其它任务就...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——多线程之线程池实现]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84552427</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84552427</guid><author>Hamlee67</author><pubDate>Mon, 26 Nov 2018 17:15:56 +0800</pubDate><description><![CDATA[线程池基本原理

在传统服务器结构中，常是有一个总的监听线程监听有没有新的用户连接服务器，每当有一个新的用户进入，服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户，当用户与服务器端关闭连接以后，服务器端销毁这个线程。（关于并发服务器更多详情，请看《并发服务器》）。

 

然而频繁地开辟与销毁线程极大地占用了系统的资源，而且在大量用户的情况下，系统为了开辟和销毁线程将浪...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程私有数据]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84401982</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84401982</guid><author>Hamlee67</author><pubDate>Fri, 23 Nov 2018 18:37:45 +0800</pubDate><description><![CDATA[在多线程程序中，经常要用全局变量来实现多个函数间的数据共享。由于数据空间是共享的，因此全局变量也为所有线程共有。

 

测试代码如下：


	#include &amp;lt;stdio.h&amp;gt;
	
	
	#include &amp;lt;pthread.h&amp;gt;
	
	
	#include &amp;lt;unistd.h&amp;gt;
	
	
	#include &amp;lt;stdlib.h&amp;gt;
	
	 
	
	i...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——线程堆栈大小的使用介绍]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84401516</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84401516</guid><author>Hamlee67</author><pubDate>Fri, 23 Nov 2018 17:59:50 +0800</pubDate><description><![CDATA[先来讲说线程内存相关的东西，主要有下面几条：

进程中的所有的线程共享相同的地址空间。
	任何声明为 static/extern 的变量或者堆变量可以被进程内所有的线程读写。
	一个线程真正拥有的唯一私有储存是处理器寄存器。
	线程栈可以通过暴露栈地址的方式与其它线程进行共享。
有大数据量处理的应用中，有时我们有必要在栈空间分配一个大的内存块或者要分配很多小的内存块，但是线程的栈空间的最大值在线程...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程和线程的区别与联系]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84397461</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84397461</guid><author>Hamlee67</author><pubDate>Fri, 23 Nov 2018 16:18:52 +0800</pubDate><description><![CDATA[在许多经典的操作系统教科书中，总是把进程定义为程序的执行实例，它并不执行什么, 只是维护应用程序所需的各种资源，而线程则是真正的执行实体。

为了让进程完成一定的工作，进程必须至少包含一个线程。



进程，直观点说，保存在硬盘上的程序运行以后，会在内存空间里形成一个独立的内存体，这个内存体有自己的地址空间，有自己的堆，上级挂靠单位是操作系统。操作系统会以进程为单位，分配系统资源，所以我们也说，进...]]></description><category></category></item><item><title><![CDATA[Linux 多任务编程——进程间通信：共享内存(Shared Memory)]]></title><link>https://blog.youkuaiyun.com/Hamlee67/article/details/84392453</link><guid>https://blog.youkuaiyun.com/Hamlee67/article/details/84392453</guid><author>Hamlee67</author><pubDate>Fri, 23 Nov 2018 15:07:12 +0800</pubDate><description><![CDATA[
概述
共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存，就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候，其它进程都会察觉到这个更改。



共享内存的特点：
1）共享内存是进程间共享数据的一种最快的方法。

 一个进程向共享的内存区域写入了数据，共享这个内存区域的所有进程就可以立刻看到其中的内容。...]]></description><category></category></item></channel></rss>