Linux
文章平均质量分 61
VioletEvergarden丶
努力为游戏行业发光发热
展开
-
socket优雅关闭连接
优雅关闭连接前言closeshutdown若被动方一直不发第三次挥手代码前言今天突然发现最近搞的那个HTTP服务器的一个bug。以前有个突然服务器崩溃的问题,不过是偶然发生的,所以一直搁置没有解决。今天调试过程中突然发现一个致命问题,就是客户端发的HTTP请求在最后一次执行后直接调用了close,而服务端返回的数据导致这个客户端无法接受到,因为服务端的write函数,所以会触发一个SIGPIPE的中断。closeclose函数或者shutdown函数调用后都会向对端发送FIN。一般是客户端原创 2021-08-19 17:45:10 · 6405 阅读 · 0 评论 -
C++ __thread的个人理解
C++ __thread的个人理解前言__thread验证代码前言今天依然在调试我那个简陋的server,下午起床逛GitHub时候发现一个大佬在创建线程pthread时,先声明了个__thread,就像这样我?这是啥玩意,找了度娘发现讲解的人也很少,于是对着一两篇现有文章记录下自己的理解__thread被__thread修饰的变量,在多线程中不是共享的而是每个线程单独一个,个人理解就是同一个变量即使多个线程同时调用,在同样的动作下也应该出现同样的一个结果。既然一份变量,那就用static原创 2021-08-17 16:48:53 · 893 阅读 · 0 评论 -
C++ 实现半同步半异步线程池
半同步半异步线程池TaskQueue.h#pragma once#include<queue>#include<pthread.h>using namespace std;using callback=void (*)(void* arg);//任务结构体template <class T>struct Task{ Task<T>(){ function =nullptr; arg=nullptr;原创 2021-07-30 16:36:10 · 92 阅读 · 0 评论 -
C语言实现半同步半异步模型
线程池原理![在这里插入图片描述](https://img-blog.csdnimg.cn/a4814caaa4074958a134aafbdcf67485.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x6aDgyNDM1OTUwOA==,size_16,color_FFFFFF,t_70#pic_center)原理#include<原创 2021-07-28 15:30:07 · 97 阅读 · 0 评论 -
wordpress无法上传大于2M文件(2021)
wordpress无法上传大于2M文件前言首先在根目录搜索php.ini修改完成记着重启apache前言今天打算给自己的主页做一个视频背景,突然发现最新的wordpress限制了上传文件大小,只能上传2M。(以前没这样情况啊???)于是首先打开万能度娘搜索解决方法。。。大家的解决blog咋都长一个样?都是修改/etc/php.ini文件。有的人说要在/etc下面新建一个php.ini有的人说文件存在直接修改,可是文件都不存在。。。memory_limit=128Mpost_max_size原创 2021-07-04 18:08:23 · 472 阅读 · 5 评论 -
2021最新版 从零搭建wordpress环境
wordpress前言1. 操作系统为阿里云ubuntu 20.042. 更新基础包3. 安装PHP环境4. 安装apache5. 安装MySQL6. 建立Apache与MySQL的连接7. 重启Apache8. 安装wordpress9. wordpress移动到默认路径10. 修改数据库配置11. 登陆wordpress12 .备注如果帮到你了就赏一个赞吧,也算是给菜鸡的一点鼓励前言本人一开始用的是阿里云市场里提供已经安装好wordpress,基于centos7的服务器。然而那个LAMP环境都原创 2021-07-03 19:02:16 · 1102 阅读 · 3 评论 -
VSCode远程连接云服务器详细过程
VSCode远程连接云服务器详细过程安装SSH插件打开云服务器SSH连接权限参考阿里云配置过程,选择配置安全组规则加入SSH 22端口配置SSH密码,选择那个密码/密钥,点击重置实例密码VSCode添加新的远程连接,点那个加号输入你的云服务器IP配置SSH文件,第一次配置自动出来,没有就点前面加号旁边的那个齿轮配置文件内容直接输入密码即可连接安装SSH插件打开云服务器SSH连接权限参考阿里云配置过程,选择配置安全组规则加入SSH 22端口配置SSH密码,选择那个密码/密钥,点击重置实例密码原创 2021-06-29 10:54:48 · 1021 阅读 · 0 评论 -
Linux 信号量
Linux 信号量信号量信号量信号量是Dijkstra在1965年提出的一种方法,它使用一个整型变量来累计唤醒次数,供以后使用。在他的建议中引入了一个新的变量类型,称作信号量(semaphore)。一个信号量的取值可以为0(表示没有保存下来的唤醒操作)或者正值(表示有一个或多个唤醒操作)。Dijkstra建议设立两种操作:down和up(分别为一般化后的sleep和wakeup)。对一个信号量执行down操作,则是检查其值是否大于0。若该值大于0,则将其减1(即用掉一个保存的唤醒信号)并继续;若该值原创 2021-04-15 22:03:07 · 141 阅读 · 0 评论 -
Linux 线程同步之条件变量与互斥锁的区别与联系
条件变量与互斥量互斥量条件变量为什么有互斥锁,还需要条件变量?互斥量互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥锁加锁的线程将会阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为运行状态的线程可以对互斥锁加锁,其他线程将会看到互斥锁依然被锁住,只能回去再次等待它重新变为可用。#include <stdio.h>#原创 2021-04-15 21:55:21 · 865 阅读 · 0 评论 -
Linux perror和strerror的区别
线程函数中检测错误信息最近看Linux中的线程时发现, 出错检测不用perror先说结论:线程中检查错误方式为:int ret = pthread_mutex_init(&mutex, NULL); if (ret != 0) { fprintf(stderr, "pthread_mutex_init: %s\n", strerror(ret)); exit(1); }而以前都是用如下方式:int ret = fork();原创 2021-04-14 16:03:59 · 399 阅读 · 2 评论 -
Linux pthread_join的使用注意
pthread_join的使用注意pthread_join回收时子线程资源避免回收局部变量pthread_join在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。不过这个copy过程和fork不一样。 copy后的进程和原先的进程共享了所有的变量,运行环境。这样,原先进程中的变量变动在copy后的进程中便能体现出来。回收时子线程资源避免回收局部变量正确回收方法一#include &原创 2021-04-13 22:12:01 · 1032 阅读 · 2 评论 -
Linux中主子线程的退出顺序
线程的退出顺序子线程先终止,主线程后终止进程结束,所有线程都终止主线程先终止,子线程后终止主线程和子线程之间没有必然的退出次序关系。主线程退出,子线程可以继续执行;子线程退出,主线程也可以继续执行。程序加载到内存中执行的时候,进程就会生成一个主线程。虽然主线程和子线程之间没有必然的退出次序关系,但是如果进程终止,那么进程下所有的线程都会终止。子线程先终止,主线程后终止#include <stdio.h>#include <stdlib.h>#include &原创 2021-04-13 16:54:07 · 1076 阅读 · 0 评论 -
Linux Epoll LT与ET模式对比
Epoll LT与ET模式对比LT模式和ET模式为何ET模式要设置非阻塞LT模式和ET模式LT(水平触发),当有事件产生读写数据时,调用read或者write来完成缓冲区的读写操作,假如一次没有读完/写完,下次epoll_wait仍然会以有事件的样子再次通知。LT模式为默认的工作方式,当socket描述符发生改变时触发事件,即使内核缓冲区中的数据未读完,第二次调用时仍然会读取数据。ET(边沿触发),当有事件产生读写数据时,调用read或者write来完成缓冲区的读写操作,假如一次没有读完原创 2021-04-03 13:10:09 · 248 阅读 · 0 评论 -
Linux socket下read函数详解
在socket中服务器与客户端进行通信,当其中一方调用close(即这一方会发送一个fin)关闭套接字之后,另一方read()会返回一个0。我之前编写的一个服务器与客户端通信(一个服务器只连接一个客户端):服务器开两个进程,一个用于接收客户端发送的数据,另一个进程用于向客户端发送数据。客户端开两个进程也是一个用于发送数据一个用于接收数据。由于创建了两个进程,那么套接字的引用计数都为2,只有当客户端关闭两次套接字,在服务器的read()才会返回0。另外,如果在虚拟机上运行,打开两个shell,一个运行客.原创 2021-04-03 09:51:32 · 2169 阅读 · 0 评论 -
(超详细)Linux Epoll多路复用详解与优势分析
Linux Epoll多路复用EpollEpoll#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <arpa/inet.h>#include <sys/epoll.h>#include <errno.h>#include <ctype.h>#define MAXLINE 8原创 2021-04-02 21:41:09 · 921 阅读 · 0 评论 -
(超详细)Linux Select多路复用与实例
Linux Select多路复用阻塞与非阻塞多路复用技术select函数select模型的缺点select服务器代码流程阻塞与非阻塞阻塞IO阻塞:进程会一直阻塞,直到数据拷贝完成。应用程序调用一个I/O函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,I/O函数返回成功指示。这个是linux系统默认的I/O下操作模式,也是最常见的I/O操作模式。也就是说,如果你创建了一个套接字,想要使用非阻塞模式,那么你需要进行设置,因为你默认的是阻塞原创 2021-04-02 17:13:55 · 5189 阅读 · 3 评论