自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 生产环境使用CGO

最近项目有个需求,需要为app提供算子API。算子为pytorch训练生成的深度模型,并用libtorch封装提供sdk。c++服务是一个较好的解决方案,只需要在服务编译中添加sdk的编译依赖就行了,但是c++服务学习成本太高,折中一下,选择CGO方案。本文不介绍如何进行深度模型训练,sdk编写,以及golang服务的搭建,仅仅就golang和c++接口交互做介绍。.........

2022-07-28 21:08:50 541 1

原创 线性回归python实现

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。本文首先介绍了最小二乘法求解线性回归的推到过程,然后使用python实现了最小二乘法,并对实验数据进行了简单评估......

2022-07-26 21:01:38 4892 4

原创 Golang读写锁应用

读写锁实际是对读写操作进行加锁。需要注意的是多个读操作之间不存在互斥关系,这样提高了对共享资源的访问效率。先看一个例子:package mainimport ( "sync" "time")var mu sync.RWMutexfunc A() { fmt.Println("a call rlock") mu.RLock() fmt.Println("a get rlock") defer mu.RUnlock() B()}func B() { time.Sl

2022-04-28 16:46:37 2322 3

原创 Google Protobuf oneof使用

一、编写proto协议当我们某一个字段可能出现多种不同类型,但是一次只想出现一次,那么就可以使用oneof。对于网络传输中的一个响应,可能出现不同的结构。例如,response可能是文章列表(包含标题,正文,作者,日期等字段)、也有可能是一首歌(歌曲的byte,标题,作者信息等)。我们可以设计如下proto,使用protoc --cpp_out=. response.proto生成c++源代码,接下来写测试代码。// response.protosyntax="proto3";messag

2021-10-12 13:20:32 21188 1

原创 linux高级编程笔记(十)——socket编程

一、C/S模型和B/S模型 C/S B/S 优点 缓存大量数据、协议选择灵活、 速度快 安全性、跨平台、开发工作量小 缺点 安全性 不能缓存大量数据、严格遵守http 二、预备知识1网络字节序我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从..

2021-03-08 23:34:17 1371 2

原创 linux高级编程笔记(九)——网络开篇

一、模型OSI七层模型和TCP/IP模型1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。2.数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。3.网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径

2021-03-08 16:59:27 278

原创 linux高级编程笔记(八)——线程同步

一、互斥量mutex操作原语pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;//静态初始化int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);//动态初始化int pthread_mutex_lock

2021-03-08 15:41:47 517

原创 linux高级编程笔记(七)——线程

一、线程概念1 线程和进程的关系轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone 从内核里看进程和线程是一样的,都有各自不同的PCB,但是同一进程的各个线程PCB中指向内存资源的三级页表是相同的 进程可以蜕变成线程 在美国人眼里,线程就是寄存器和栈 在linux下,线程最是小的执行单位;进程是最小的分配资源单位查看进程的LWP(线程号)ps -Lf pidps -eLf2 线程间共享资源文件描述符表 .

2021-03-02 21:00:29 176

原创 linux高级编程笔记(六)——进程间的关系

一、终端在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),在讲进程时讲过,控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。信号中还讲过,在控制终端输入一些

2021-02-28 15:50:17 180

原创 linux高级编程笔记(五)——信号

一、信号的概念A给B发送信号,B收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与硬件中断类似—―异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”。信号的特点:由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性。但对于用户来说,这个延迟时间非常短,不易察觉。·每个进程收到的所有信号,都是由内核负责发送的,内核处理。1 与信号相关的事件和状态(1) 产生信号按键产生,如:Ctrl+c、Ctrl+z.

2021-02-28 11:18:08 1368 3

原创 linux高级编程笔记(四)——进程间通信(IPC)

Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(InterProcess Communication,IPC)。在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机的蓬勃发展,一些

2021-02-25 18:50:02 243

原创 linux高级编程笔记(三)——进程

一、cpu/mmu虚拟地址:可用空间有4G,MMU将虚拟地址映射到屋里内存中,即使运行的两个相同的程序,他们非内核区也是在屋里内存中不同的位置,但是,所有进程的内核空间在物理内存中只有一份拷贝二、PCBPCB是一个名为task_struct的结构体,它包含如下成员:三、环境变量1)字符串(本质)2)同一的个是:变量名=值(:值)3)用来描述进程环境信息使用形式:与命令行参数类似加载位置:与命令行参数类似。位于用户区,高于stack引入环境变量表:需要声明环境变量。ext.

2021-02-25 13:07:44 591

原创 代码实现卷积操作

问题解答传统卷积运算是将卷积核以滑动窗口的方式在输入图上滑动,当前窗口内对应元素相乘然后求和得到结果,一个窗口一个结果。相乘然后求和恰好也是向量内积的计算方式,所以可以将每个窗口内的元素拉成向量,通过向量内积进行运算,多个窗口的向量放在一起就成了矩阵,每个卷积核也拉成向量,多个卷积核的向量排在一起也成了矩阵,于是,卷积运算转化成了矩阵乘法运算。下图很好地演示了矩阵乘法的运算过程:将卷积运算转化为矩阵乘法,从乘法和加法的运算次数上看,两者没什么差别,但是转化成矩阵后,运算时需要的数据被存在连.

2021-02-18 21:48:10 2724 1

原创 linux高级编程笔记(二)-文件系统

一文件操作1 stat函数2 chmod函数3 chown函数4 utime函数5 truncate函数6 link函数7 rename函数8 chdir函数9 getcwd函数10 pathconf函数二目录操作1

2021-02-09 22:08:18 799

原创 linux高级编程笔记(一)-文件IO

目录一、open/close函数1 open函数详解2 close函数3 代码示例4 open函数常见错误二、 read/write函数1 函数详解2 代码示例3 综合使用4 思考三、perror/strerror四、阻塞与非阻塞五、lseek函数六、fcntl函数七、ioctl函数在linux环境中,操作系统内核为每一个进程分配了4g的虚拟内存空间,如下图所示。其中,0-3g为用户空间;3-4g为内核空间,是所有进程共享的区域。在内.

2021-02-08 16:24:11 367

空空如也

空空如也

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

TA关注的人

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