杂
解决粘包分包问题
在项目开发中,采用自定义的报文格式,报文长度+报文内容 例:0010abcdefghi
网络字节序和主机字节序
网络字节顺序NBO(Network Byte Order): 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。
主机字节顺序(HBO,Host Byte Order): 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。如 Intel x86结构下, short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12 。如 IBM power PC结构下, short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78。
http
http基本概念
Classification-by-Fusing-Multimodal-Data
¶全文:
论文链接
¶代码:
github
¶代码结构目录:
代码一般都是半夜写的,只想着能不能跑通没在意结构,现在实验都做完了论文也发了懒得再动代码了(主要怕自己优化结构后出BUG)就大概讲一下代码流程吧。
不要问为啥根目录是zywang 😏 在人家服务器上跑的。
¶代码流程:
1⃣数据集划分:按照 70:15:15 划分数据集包括文本和图片(主要使用xlrd包对数据集annotations中的文件进行处理,也可以使用其他方法对.tsv文件进行处理)
2⃣使用train_vgg训练VGG16模型,得到xx.pth
3⃣使用nlp中的main.py训练FastTest模型,生成xx.bin
4⃣分别调用.pth和.bin文件生成vector
5⃣将生成的vector放入train_softmax.py进行训练
型别推导
模板型别推导
auto型别推导
decltype
¶模板型别推导
template
void f(ParamType param);
f(expr)//从expr推导T和ParamType的型别
¶情形一:ParamType是哥指针或者引用,但不是万能引用
若expr有引用型别,先将引用忽略
随后对expr的型别和ParamType的型别进行模式匹配,决定T的型别
template
void<T& param>
型别
T的型别
param型别
int x=27
int
int
int&
const int cx=x
const int
const int
const int&
const int &rx=x
const int&
const int
const int&
template
void<const T& param>
型别
T的型别
param型别
int x=27
int
int
const int&
const int cx ...
socket
Socket基本操作
原文链接
socket是“open—write/read—close”模式的一种实现,下面以TCP为例。
¶socket()函数
1int socket(int domain, int type, int protocol);
socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而**socket()**用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。
正如可以给fopen的传入不同参数值,以打开不同的文件。创建socket的时候,也可以指定不同的参数创建不同的socket描述符,socket函数的三个参数分别为:
domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决 ...
调度程序
僵尸进程
¶什么是僵尸进程
僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。
¶产生原因
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构 (系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。
在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保 留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸。
如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。
但是如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态 ...
守护进程
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101#include "_public.h"// 程序运行的日志。CLogFile logfile;int main(int argc,char *argv[]){ // 程序的帮助。 if (argc != 2) { printf("\n"); printf("Using:./checkproc logfilename\n"); printf("Example:/project/tools1/bin/procctl 10 /project/tools1/bin/checkproc /tmp/log/checkproc.log\n\n"); printf("本程序用于检查后台服 ...
linux信号量
信号量的概念
信号量(信号灯)本质上是一个计数器,用于协调多个进程(包括但不限于父子进程)对共享数据对象的读/写。它不以传送数据为目的,主要是用来保护共享资源(共享内存、消息队列、socket连接池、数据库连接池等),保证共享资源在一个时刻只有一个进程独享。
信号量是一个特殊的变量,只允许进程对它进行等待信号和发送信号操作。最简单的信号量是取值0和1的二元信号量,这是信号量最常见的形式。
通用信号量(可以取多个正整数值)和信号量集方面的知识比较复杂,应用场景也比较少。
本文只介绍二元信号量。
相关函数
Linux中提供了一组函数用于操作信号量,程序中需要包含以下头文件:
12345#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>
¶semget函数
semget函数用来获取或创建信号量,它的原型如下:
1int semget(key_t key, int nsems, int semflg);
1)参数key是信号量的键值,typedef unsigned int key_t ...
Linux内存共享
Linux内存共享
¶共享内存的概念
共享内存(Shared Memory)就是允许多个进程访问同一个内存空间,是在多个进程之间共享和传递数据最高效的方式。操作系统将不同进程之间共享内存安排为同一段物理内存,进程可以将共享内存连接到它们自己的地址空间中,如果某个进程修改了共享内存中的数据,其它的进程读到的数据也将会改变。
共享内存并未提供锁机制,也就是说,在某一个进程对共享内存的进行读写的时候,不会阻止其它的进程对它的读写。如果要对共享内存的读/写加锁,可以使用信号量。
¶相关函数
Linux中提供了一组函数用于操作共享内存,程序中需要包含以下头文件:
12\#include <sys/ipc.h>\#include <sys/shm.h>
¶shmget函数
shmget函数用来获取或创建共享内存,它的声明为:
1int shmget(key_t key, size_t size, int shmflg);
参数key是共享内存的键值,是一个整数,typedef unsigned int key_t,是共享内存在系统中的编号,不同共享内存的编号不能相同,这一点 ...
Linux信号
Linux信号
¶信号的基本概念
信号(signal)是软件中断,是进程之间相互传递消息的一种方法,用于通知进程发生了事件,但是,不能给进程传递任何数据。
信号产生的原因有很多,在Linux下,可以用kill和killall命令发送信号。
¶信号的类型
信号名
信号值
默认处理动作
发出信号的原因
SIGHUP
1
A
终端挂起或者控制进程终止
SIGINT
2
A
键盘中断Ctrl+c
SIGQUIT
3
C
键盘的退出键被按下
SIGILL
4
C
非法指令
SIGABRT
6
C
由abort(3)发出的退出指令
SIGFPE
8
C
浮点异常
SIGKILL
9
AEF
采用kill -9 进程编号 强制杀死程序。
SIGSEGV
11
C
无效的内存引用
SIGPIPE
13
A
管道破裂,写一个没有读端口的管道。
SIGALRM
14
A
由alarm(2)发出的信号
SIGTERM
15
A
采用“kill 进程编号”或“killall 程序名”通知程序。
SIGUSR1
10
A
用户自定义信号1
SIG ...