自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘inform

系统ubuntu18,数据库mysql8.0。使用Navicat清空某表时报标题错误。在 /etc/mysql/mysql.conf.d/mysqld.cnf中[mysqld]的最下面加。保存后重启mysql。

2022-08-11 15:18:35 181 1

原创 false share

(非详细解释,供自己使用)假设系统支持并行执行同一进程下的线程,并且假设OS将两个线程调度到两个core上(不同core有自己的L1、L2, 所有core共享L3)。如果两个线程共享变量int x, core0的cache和core1的cache分别从内存读入x并且将cache line的状态设为s(见MESI协议)。此时thread0和thread1欲写x,会竞争,假设thread0优先写,则会将其x所在cache line设为m,并且core1将对应cache line设为i。假设下次threa

2022-05-20 15:27:35 125

原创 为什么服务器要给SIGPIPE设置信号处理函数SIGINT

如果客户端调用close, 接着会给服务端发送FIN包。然而服务端并不知道客户端调用的是close还是shutdown。此时服务端如果read, 返回0,就会正常关闭。如果write, 发送的包到客户端, 而客户端调用过close了,于是会发个RST置位的包给服务端。服务端收到RST包后,OS就知道客户端这条连接是死的了。但是处于较低层的它不会主动有什么动作。而应用层的服务端程序再次调用write时,OS就会告诉服务端进程,“他已经死了”,即发送一个SIGPIPE信号给服务端进程。这个信号的...

2022-05-11 20:12:07 208 1

原创 线程与信号

多线程环境下,对信号的处理变得更加复杂,因为同一个进程的每一个子线程都可以收到信号, 并且共享信号处理函数。所以此时要定义一个专门的线程来进行信号的处理。主要有以下两个步骤:1,在主线程创建第一个线程之前就调用sigpromask函数的的pthread版本:pthread_sigmask进行信号的屏蔽(屏蔽那些你想要收到并处理的信号, 这样非信号处理线程就不会收到这些信号了)。int pthread_sigmask(int how, const sigset_t *newmask, sigset_t

2022-05-03 16:23:51 261

原创 daemon_init创建守护进程,重定向0,1,2到/dev/null

将0,1,2打开,保证调用那些默认往0,1,2读写的IO函数时不会出错。如果没有打开,那么新创建的套接字的文件描述符将占用这些位置,守护进程的一些调用可能会将非预期的数据发送给客户。而作为守护进程不应使用标准输入输出设备,所以将它们重定向到垃圾桶里,仅起到占位作用。...

2022-04-19 15:11:45 225

原创 readline缓冲区和select

在UNP中出现的一个从IO函数:readline,拥有自己的对外暴露的内部缓冲区(非stdio缓冲区)。在使用select的echo客户端中,如果使用文本文件而不是stdin来作为数据源,那么不同于命令行交互,数据的传输速度将被拉到很快的速度。这时候会发现本该出现的“回声”出现了一些丢失。这是因为readline读取数据,并且返回。在这期间,如果有新分组到到达,会存在readline的内部缓冲区中。但是系统函数select并不知道这个内部缓冲区的存在,也自然不会使用这些数据了。但是,这个内部缓冲

2022-03-19 22:26:52 124

原创 waitpid的一种情景

使用fork实现的多进程TCP服务器,在接收到多个客户端几乎同时发送的FIN后, 每个子进程发送ACK并exit, 产生一个SIGCHLD信号。多个SIGCHLD信号同时到达父进程的信号处理函数中。注意unix信号是没有排队一说的, 此时若在信号处理函数中循环wait,将产生未预期的结果,不能彻底关闭所有子进程从而产生僵尸进程。We must specify the WNOHANG option: This tells waitpid not to block if there are running

2022-03-19 17:00:29 2214

原创 值-结果参数

套接字地址结构在函数传递时以引用传递, 而其长度有时是传值,有时传引用。主要分两种情况来进行讨论:1,从用户进程到内核传递地址结构的函数有三个,bind, connect和sendto。指针和指针所指内容的大小都传递给了内核,所以内核可以正确地复制其到内核中。2,从内核到用户进程传递地址结构地函数有四个:accept, recvfrom, getsockname, getpeername。为何在此时,长度需要传引用呢?因为首先需要告诉内核结构的大小, 让其不越界地进行写操作,

2022-03-18 18:09:22 164

原创 TIME_WAIT

在一次TCP通信结束之际,双方使用四次挥手来结束连接。假设客户端主动关闭,则客户端将发送最终的ACK。从此刻开始,进入时长为一般为2MSL(一个包的寿命)的TIME_WAIT状态,因为若这个ACK包丢失,服务器端要重新发送FIN包,所以需要等待一会。至于为什么是2MSL呢?一个MSL是为了客户端的ACK包能够到达服务端,第二个MSL是为了能收到服务端的重发的FIN包。...

2022-03-17 20:44:37 349

原创 is_POD_type

对于POD型别(与C结构体兼容或者标量型别)的数据类型,在拷贝或者构造时,可以直接按字节进行操作或者调用STL算法。而非POD型别的数据类型则必须调用它的非平凡的构造函数或者拷贝构造函数。STL为各种基本类型定义了_type_traits模板类的特化版本,其中typedef_true_type/_false_typeis_POD_type;规定了此类型的POD型别(_true_type和_false_type是空结构体,因为模板的参数推导的运作必须保证它们是“类型”);而一些编译...

2022-02-17 13:34:03 521

空空如也

空空如也

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

TA关注的人

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