自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (3)
  • 收藏
  • 关注

原创 c语言实现生产者与消费者

实验目的①实现生产者—消费者问题的模拟,以便更好的理解此经典进程同步问题。生产者-消费者问题是典型的PV操作问题,假设系统中有一个比较大的缓冲池,生产者的任务是只要缓冲池未满就可以将生产出的产品放入其中,而消费者的任务是只要缓冲池未空就可以从缓冲池中拿走产品。缓冲池被占用时,任何进程都不能访问。②每一个生产者都要把自己生产的产品放入缓冲池,每个消费者从缓冲池中取走产品消费。在这种情况下,生产者消费者进程同步,因为只有通过互通消息才知道是否能存入产品或者取走产品。他们之间也存在互斥,即生产者消费者必须互

2020-05-31 12:32:59 4030

原创 c语言进程池原理及实现

进程池与线程池出发点一样,都是考虑多核情况下任务的并行处理;从多进程和多线程编程的区别上看,多线程有许多的同步、互斥的方法,较擅长于异步协作;而多进程同步、互斥的方法相对比较麻烦,则更多地考虑上下文独立执行;从Nginx使用线程池/进程池处理大并发的思路去分析,其实就是多客户端大量连接的场景;主进程监听是否有新客户端tcp连接,然后分发给工作进程去响应http请求,在这种场景下每个连接都是一个独立的上下文逻辑,每个工作进程的内容都是对等地处理http请求,这种情况就非常适合进程池的方式;把上述的.

2020-05-31 12:30:35 1721

原创 c语言线程池缩放功能实现

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>#include <signal.h>#include <errno.h>#include <assert.h>#define DEFAULT_TIME 10 //10s检测一次#define MIN_W.

2020-05-31 12:24:27 212

原创 c语言简单的线程池实现方法

#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>typedef void*(*FUNC)(void* arg); //指向函数的指针,用来指向我的线程函数。typedef struct _thpool_jobqueue //任务队列.

2020-05-31 12:22:42 274

原创 c语言实现线程池代码实现

关于线程池相关笔记,实现了一半,今天把完整封装和调用实现一下。https://blog.csdn.net/jenie/article/details/106440389封装的思路如下:通过c语言构造一个空间大小,构造函数和析构函数typedef struct { size_t size; void* (*ctor)(void *_self, va_list *params); void* (*dtor)(void *_self);} AbstractClass;new对像带参数.

2020-05-31 12:20:16 375 1

原创 zookeeper原理和应用领域

zookeeper是什么官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。好抽象,我们改变一下方式,先看看它都提供了哪些功能,然后再看看使用它的这些功能能做点什么。zookeeper提供了什么简单的说,zookeeper=文件系统+通知机制。1、 文件系统Zookeeper维护一个类似文件系统的数据结构:...

2020-05-31 03:08:59 177

原创 Mysql数据库中的各种锁

在介绍InnoDB与MyIsam的区别时,提到了:InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁本文便着重对Mysql数据库中的锁进行介绍概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和...

2020-05-31 02:06:14 307

原创 CentOS7安装MongoDB

使用wget命令下载安装包wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.4.tgz解压tar -zxvf mongodb-linux-x86_64-rhel70-3.2.4.tgz将解压包拷贝到指定目录mv mongodb-linux-x86_64-rhel70-3.2.4 /usr/local/mongodb创建数据库目录cd /usr/local/mangodb/bin .

2020-05-30 19:24:03 302

原创 关于线程池原理及相关笔记

如何封装成模块#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <pthread.h>#define LL_ADD(item,list) do { \ item-&g...

2020-05-30 16:21:47 221

原创 CENTOS7下安装REDIS

一、安装redis第一步:下载redis安装包wget http://download.redis.io/releases/redis-4.0.6.tar.gz[root@iZwz991stxdwj560bfmadtZ local]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz--2017-12-13 12:35:12-- http://download.redis.io/releases/redis-4.0.6.ta

2020-05-24 00:27:50 93

原创 关于PCM音频和g711音频编码的转换。

PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。Windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件。 将音频数字化。事实上就是将声音数字化。最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) 。运作原理例如以下:首先我们考虑声音经过麦克风,转换成一连串电压变化的信号。例如以下图所看到的。这张图的横座标为秒。纵座标为电压大小。要将这种信...

2020-05-23 13:07:33 6060 2

原创 html5使用websocket发送(PCM)音频数据到服务器,再转在wav文件

通过websocket发送音频数据。<html><head> <meta charset="utf-8"> <title>test</title></head><body><div> <button id="intercomBegin">开始对讲</button> <button id="intercomEnd">关闭对讲<.

2020-05-23 12:47:05 9533 4

原创 LVS负载均衡

一、LVS简介LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调...

2020-05-22 19:49:22 109

原创 同步和异步,阻塞和非阻塞的关系之代码实现异步http客户端

上一章讲解一些简单笔记https://blog.csdn.net/jenie/article/details/106267740今天来一个实例如何实现异步的http请求:按以下四步走1 init_context a.pthread_create b.epoll_create2 uninit_context a.pthread_cancel b.close3 commit() a.准备socket b connect c.protocol ...

2020-05-22 19:32:15 582

原创 关于负载均衡haproxy的使用方法和场景。通过windows转到虚拟机,运行linux程序。

之前有个文章讲了一下 关于nginx的相关笔记https://blog.csdn.net/jenie/article/details/106222213这不刚搞完,工作上有个应用场景。公司有二台比较不错的服务器,一台是windows,一台是linux。linux应该用饱满了。windows空闲没怎么用,但有些windows的小应用,供客户演示的,然后,我们的程序全部是linux平台下开发的,为了兼容,因此,打算用方案。在windows装虚拟机。装个5-10个,然后把程序装到虚拟机上,然后通.

2020-05-22 19:20:40 400

原创 同步和异步,阻塞和非阻塞的关系

同步和异步形容二者之间的关系,业务流程阻塞和非阻塞形容io socket的状态可以组合成同步阻塞,同步非阻塞,异步阻塞,异步非阻塞关键点:创建一个线程,callback io多路复用epollking式四元组1 init_context a.pthread_create b.epoll_create2 uninit_context a.pthread_cancel b.close3 commit() a.准备socket b ...

2020-05-21 23:06:25 281

原创 react antd design pro 的protable的另类使用方法。

protable中antd design的一个强大的组件。具体介绍https://protable.ant.design/简单的表可以通过大进行快速处理。相当方便。但用完以后发现,跟实际需求相差还是很大的。有些字段是临时生成的。在表里是没有的。翻了官网,硬是没有找到相关解决办法。突发一想,想到以下解决办法。以时间字段为例。数据库里,只有createtime字段。有些状态值,是根据其余字段计算出来,在数据库里也是没有值的。但页面需要展示开始和结束时间等等,要如何处理。。index.

2020-05-21 01:50:45 6801 1

原创 关于react and desigin pro的用户登录模块简单笔记

react and desigin pro框架还是挺不错的。我用的是4.0版本,前几天用这个东西做了一个用户登录鉴权等功能模块。今天总结一下启动 npm run start:no-mock 去除模拟数据,我这边直接用后台验证找到登录页面:src/pages/user/login/service.ts我这边后台的逻辑是 (使用 thinkphp6.0) 主要看account方法即可。<?phpnamespace app\controller;use app\Ba...

2020-05-21 01:38:05 331

原创 librtmp的简单安装使用

(一)openssl安装(二)zlib安装(三)libssl-dev 安装以上步骤,可自行安装,本文主要讲librtmp的编译安装(四)编译libRTMPgit clone git://git.ffmpeg.org/rtmpdump

2020-05-20 23:16:00 1672

原创 nginx简单笔记

如果要代理二台或是多台,使用upstream注意 /usr/local/nginx/images 路径和 location /images配置在什么场景用cgi (日志,在线编译工具)cgi的二个工具cgi一请求一进程fastcgi 启动一个进程池,等待你来请求spawn-fcgi .tar.gz是一个启动的工具,fcgi.tar.gz是一个开发库spwan-fcgi 生成可执...

2020-05-19 22:16:46 119

原创 关于nginx的相关笔记

lvs 通过虚拟IP地址,不需要专门的机器,通过其中一台机器设置一个ip通过域名映射二个ip地址,通过dns地址,映射出二个ip地址,dns也能做负载均衡。如果其中一台挂了,需要10分钟同步...

2020-05-19 20:58:43 112

原创 CentOS7安装Go环境简单的tcp服务端和客户端测试

下载最新稳定版本wget https://studygolang.com/dl/golang/go1.14.3.src.tar.gz我放置目录 /home/go设置环境变量vim /etc/profileexport GOROOT=/home/goexport GOPATH=/mnt/goexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin保存esc:wq还有一种比较简便的方式 (就是输入一字字符向/etc/profile文件尾进.

2020-05-18 23:11:42 557

原创 如何用c语言实现对目录或是文件进行文件的添加,修改,删除监控(inotify)。

其实通过inotify来实现,具体代码实现如下:#include<stdio.h>#include<assert.h>#include<unistd.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<sys/inotify.h>#include<limits.h&g.

2020-05-18 16:26:01 1777

原创 谈谈如何通过c语言实现不断读取变化增长的文件(例如实时监控流媒体视频文件)

通常我们很多场合都需要用到如何读增量的文件,其实应用领域还是蛮多的。日志读取。数据同步等应用场合。都是可以用上的。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#define FILE_LINE_LEN 1024long g_curr_offset = 0;int32_t c_tail(const char *file);int3

2020-05-18 16:22:47 1294

原创 OLAP、OLTP的介绍和比较

OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;OL...

2020-05-17 03:58:31 211

原创 MySQL之MVVC简单介绍

1、什么是锁?一种保护机制,在多线程的情况下,保证操作数据的正确性与一致性2、锁有哪些分类?悲观锁、乐观锁、独占锁、共享锁、公平锁、非公平锁、分布式锁、自旋锁3、谈谈悲观锁乐观锁:指的是看待并发同步的角度,一般结合数据库将,以MySQL为例,悲观锁主要是表锁,行锁和间隙锁,叶锁,读锁,因为这些锁在被触发时会引起线程阻塞,所以叫悲观锁;而乐观锁其实在MySQL中本身不存在,但是MySQL提供了MVCC的机制,支持乐观锁机制4、什么是MVCC?只有在InnoDB引擎下存在,MVCC是.

2020-05-17 03:55:39 5910 1

原创 高性能MySQL---事务之隔离级别(未提交读(脏读)、提交读(不可重复读)、可重复读(幻读)、可串行化)

一、隔离介绍在SQL标准中定义了四种隔离级别, 每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的较低级别的隔离通常可以执行更高的并发, 系统的开销也更低二、隔离的级别MySQL能够识别所有的4个ANSI隔离级别,InnoDB引擎也支持所有的隔离级别READ UNCOMMITTED(未提交读)与脏读在READ UNCOMMITTED级别,事务中的修改,即使没有提交,对其他事务也都是可见的事务可以读取未提交的数据,这也被称为脏读(Dirty Read)

2020-05-16 17:06:35 608

转载 锁之(锁问题:脏读、不可重复读、可重复读、丢失更新(可串行化))

https://blog.csdn.net/qq_41453285/article/details/104317721?tdsourcetag=s_pcqq_aiomsg

2020-05-16 17:02:32 430

转载 C语言访问MySQL

https://blog.csdn.net/qq_41453285/article/details/102640756?tdsourcetag=s_pcqq_aiomsg

2020-05-16 17:01:06 452

原创 关于c语言使用openssl的实现websocket底层协议功能

1. 获取安装包。wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz2. 解压。tar -xzvf openssl-1.1.1c.tar.gz3. 配置。./Configure --help# 配置参数选项--openssldir=OPENSSLDIR #配置文件目录,默认是/usr/local/ssl--prefix=DIR #安装目录,默认为 OPENSSLDIR 目录[no-]threads #是否编译支持多线程的库。默

2020-05-16 13:18:34 988

原创 c语言自己实现线程池功能

上一次讲了使用libzdb数据连接池的用法,如果不想用库,想自己实现,也可以。就不需要加库了。直接上代码sqlpool.h#ifndef __SQLPOOL_H_#define __SQLPOOL_H_#define IP_LEN 15#define DBNAME_LEN 64#define DBUSER_LEN 64#define PASSWD_LEN 64#define POOL_MAX_NUMBER 20typedef struct _SQL_NODE

2020-05-15 03:15:47 369 1

原创 数据库连接池库libzdb的使用方法

Libzdb挺强大, 支持Mysql Oracle SQLite PostgreSQL,支持C和C++ Object C,不能在Window下用(看源码是因为基于Linux线程机制编写实现)。遗憾的是找个资料太费劲,只能到Libzdb官网:点此进入,今正看着上面英文文档,突然网站就登不进去了,才发现国内论坛其实搜不出什么资料。本文主要介绍Libzdb函数使用,帮理解英文文档有困难的朋友做下翻译。库结构如下首先下载libzdb的源码安装包,解压,在目录下执行./configure make..

2020-05-15 03:13:10 703

原创 C语言设计模式(抽象工厂模式)

前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。所以说,对于水果店而言,尽管都在卖水果,但是两个店卖的品种不一样。 既然水果不一样,那我们先定义水果。typedef struct _Apple{ void (*pr...

2020-05-15 01:17:36 268

原创 C语言设计模式(继承、封装、多态)

C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。可是,等我工作以后,使用的编程语言更多的是C语言,这时候我又想能不能把C语言变成面向对象的语言呢?等到后来通过思考和实践,我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。(1)继承性typedef struct _parent{ int data_parent;}Parent;typedef struct...

2020-05-15 01:11:05 382

原创 C语言设计模式(工厂模式)

工厂模式是比较简单,也是比较好用的一种方式。根本上说,工厂模式的目的就根据不同的要求输出不同的产品。比如说吧,有一个生产鞋子的工厂,它能生产皮鞋,也能生产胶鞋。如果用代码设计,应该怎么做呢?typedef struct _Shoe{ int type; void (*print_shoe)(struct _Shoe*);}Shoe;就像上面说的,现在有胶鞋,那也有皮鞋,我们该怎么做呢?void print_leather_shoe(struct _Shoe* ...

2020-05-15 01:00:56 237

原创 C语言(观察者模式)

观察者模式可能是我们在软件开发中使用得比较多的一种设计模式。为什么这么说?大家可以听我一一到来。我们知道,在windows的软件中,所有的界都是由窗口构成的。对话框是窗口,菜单是窗口,工具栏也是窗口。那么这些窗口,在很多情况下要对一些共有的信息进行处理。比如说,窗口的放大,窗口的减小等等。面对这一情况,观察者模式就是不错的一个选择。首先,我们可以对这些共有的object进行提炼。typedef struct _Object{ observer* pObserverList[MA...

2020-05-15 00:59:07 686

原创 C语言设计模式(之单件模式)

单件模式要是用C++写,一般这么写。#include <string.h>#include <assert.h>class object{public: static class object* pObject; static object* create_new_object() { if(NULL != pObject) return pObject; pObject ...

2020-05-15 00:56:31 263

原创 C语言设计模式

项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计低劣、代码质量差、测试不到位等等。就软件企业而言,没有比优秀的文化和出色的企业人才更重要的了。从软件设计层面来说,一般来说主要包括三个方面:(1)软件的设计受众,是小孩子、老人、女性,还是专业人士等等;(2)软件的基本设计原则,以人为本、模块分离、层次清晰、简约至上、适用为先、抽象基本业务等等;(3)软件编写模式,比如装饰模式、责任链、单件模式等等。从某种意义上...

2020-05-15 00:53:48 629

原创 C语言中函数指针和回调函数

函数指针:指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。我们首先来看一个函数指针的例子:#include <stdio.h>#includ

2020-05-12 17:15:15 387

原创 C语言变长数组data[0]的使用方法

、前言  第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状如下:struct buffer{ int data_len; //长度 char data[0]; //起始地址};在这个结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体b

2020-05-12 12:52:00 921

天书夜读(反汇编).pdf

天书夜读(反汇编),安全技术必读,极其重要的文档

2012-08-13

phpexecel

轻松把导出excel表的php类

2008-03-10

空空如也

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

TA关注的人

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