WebServer5-项目实战
Web Server 项目实战
1. 阻塞/非阻塞、同步/异步(网络IO)
典型的一次IO的两个阶段是什么?数据就绪 和 数据读写
数据就绪:根据系统IO操作的就绪状态
阻塞
非阻塞
数据读写:根据应用程序和内核的交互方式
同步:用自己的时间去搬运数据
异步:使用别人的时间,直接帮你搬运好
在处理 IO 的时候,阻塞和非阻塞都是同步 IO,只有使用了特殊的 API 才是异步 IO。
一个典型的网络IO接口调用,分为两个阶段,分别是“数据就绪” 和 “数据读写”,数据就绪阶段分为阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。
同步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都是由请求方A自己来完成的(不管是阻塞还是非阻塞);异步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),向B传入请求的事件以及事件发生时通知的方式,A就可以处理其它逻辑了,当B监听到事件处理完成后,会用事先约定好的通知方式,通知A处理结果。
2. Unix/Linux上的五种IO模型
a.阻塞 blocking
调用者调用了 ...
WebServer4-Linux网络编程
Web Server4
第四章 Linux 网络编程
1. 网络结构模式
C/S 结构
简介
服务器 - 客户机,即 Client - Server(C/S)结构。C/S 结构通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。
客户机通过局域网与服务器相连,接受用户的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机将数据进行计算并将结果呈现给用户。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。
在C/S结构中,应用程序分为两部分:服务器部分和客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。
优点
能充分发挥客户端 PC 的处理能力,很多工作可以在客户端处理后再提交给服务器,所以 C/S 结构客户 ...
WebServer3-Linux多线程开发
Web Server3
第二章 Linux 多线程开发
0. 遇到一个小问题
VScode 远程连接虚拟机出问题了,可能是我刚刚配置好了 WSL2 的环境导致的。
解决方案:
在任意一个文件夹中打开 VScode 别用 WSL2 登录就行
VSCode -> View -> Command Palette -> input "remote" -> Select Remote-SSH: Kill VS Code Server on Host...
重新启动即可正常连接
1. 进程概述
1.1 进程的概述
◼ 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。 一个进程可以包含多个线程。 同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多线程程序的一个特例,该进程只包含一个线程)
Linux 下线程的底层是进程实现的。
◼ 进程是 CPU 分配资源的最小单位,线程是操作系统调度执行的最小单 ...
WebServer2-Linux多进程开发
Web Server2
第二章 Linux 多进程开发
0. 解决 su 认证失败问题
1. 进程概述
1.1 程序和进程
程序是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程:
◼二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。(ELF可执 行连接格式)
◼机器语言指令:对程序算法进行编码。
◼程序入口地址:标识程序开始执行时的起始指令位置。
◼数据:程序文件包含的变量初始值和程序使用的字面量值(比如字符串)。
◼符号表及重定位表:描述程序中函数和变量的位置及名称。这些表格有多重用途,其中包括调试和运行时的符号解析(动态链 接)。
◼共享库和动态链接信息:程序文件所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态连接器的路径名。
◼其他信息:程序文件还包含许多其他信息,用以描述如何创建进程。
◼进程是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
◼ ...
WebServer1-Linux系统编程入门
Web Server1
开始我的第一个 C++ 项目学习!
先跟着牛客视频学基础,写一个简单的 Webserver,然后再优化加入其他功能。
第一章 Linux 系统编程入门
1. 环境配置
VMware Workstation Pro 17 + Ubuntu 18.04
问题1:虚拟机没网:
将虚拟机网卡删除,重新添加
问题2:虚拟机与主机之间文件拖动传输
安装 VMware Tools -> 打开桌面上的CD文件 -> 将 .tar 文件放在桌面上解压 -> 运行其中的 vmware-install.pl 文件,安装相关依赖。这时应该可以正常使用了。
如果还是不能拖动复制文件,打开任务管理器 -> 服务 -> 找到 vmware 开头的所有服务,将未启动的服务手动启动,重启虚拟机后,可以正常拖动复制。
如果遇到权限问题无法操作,参考此文:【传送门】
问题3:Xshell 连接虚拟机,虚拟机中需要安装依赖
sudo apt install openssh-server
查看虚拟机 ip
安装依赖: sudo apt install net ...
VScode+LaTeX 配置时遇到的一些问题
VScode+LaTeX 配置时遇到的一些问题
1. json 配置文件总览
参考知乎大佬的配置。
只需要修改第 142 行和第150 行对应的 SumatraPDF 和 VScode 的路径即可。
我做的唯一的修改就是,作者设置的从 SumtraPDF 的返向跳转到代码的功能对我不起作用,每次外部打开又很麻烦,于是乎修改了第 150 行的参数设置为 --ms-enable-electron-run-as-node -gr \"%f\":\"%l\" ,就好用了。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711 ...
Typora导出pdf一直停留在导出界面
Typora导出pdf一直停留在导出界面
1. 因为修改临时文件夹地址导致的问题
尝试遍了网上的各种方法对我都没奏效。
但是用管理员权限在 C:\Program Files\Typora 下打开 typora.exe 发现可以正常导出 pdf。
结合这一点,加上最近频繁出现启动文件、文件夹没有权限的问题,猛地让我想起之前安装 TexLive 的时候有问题,把用户环境变量的 TEMP 和 TMP 强行改成了 C:\Windows\TEMP 。
于是我尝试改回来
果然好用了!
2. 其他情况
emmm,还有一天考试了,遇到又遇到了这个问题,真糟心啊。
尝试1:
计算机管理->服务->Print Spooler, 先启动,再调整启动类型为自动。
尝试2
开始 - 运行,输入 regedit ,打开“注册表编辑器”。
找到以下键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler
选定 Spooler 这个文件夹,在右边窗口里找到 DependOnService 这个键值。
如果存在 http 将其删除 ...
编译原理复习
第1章 绪论
1.1 什么是编译
编译: 将高级语言(源语言)翻译成汇编语言或机器语言(机器语言)的过程。
编译在语言处理系统中的位置
预处理器:
把存储在不同文件中的源程序聚合在一起
把称为宏的缩写语句转换为原始语句
可重定位(Relocatable):
在内存中存放的起始地址 L 是不固定的。
链接器:
将多个可重定位的机器代码文件(包括库文件)连接到一起
解决外部内存地址问题
加载器:
修改可重定位地址:将修改后的指令和数据放到内存中的适当位置。
1.2 编译系统的结构
编译系统的结构与执行顺序如下图所示:
将字符流输入 词法分析器 获得词法单元流,然后经过 语法分析器 生成语法分析树。利用 语义分析器 来分析语法分析树所具有的语义。获得语义后,利用 中间代码生成器 将语法分析树转换成中间代码。中间代码为了具有更好的普适性,经过了一步 机器无关代码优化 。
优化后的中间表示形式经 目标代码生成器 转化为目标机器语言,再经过一步优化转化为与 目标机器相关 的目标机器语言,此时的代码将更好的在目标机器上执行。
1.2.1 词法分析/扫描(Scanni ...
NVIDIA显卡重新安装
win11 重装 NVIDIA 驱动
1. 安装并使用驱动卸载工具 DDU
浏览器搜索并下载安装 DDU
win + R 输入 msconfig 进入安全模式
重启后在安全模式下打开 DDU
完成卸载后重启
重启后 win + R 输入 msconfig
此时就卸载干净了
最后记得删除下面三个文件夹(使用默认路径安装是这三个)
C:\Program Files\NVIDIA Corporation
C:\Program Files\NVIDIA GPU Computing Toolkit
C:\Program Files (x86)\NVIDIA Corporation
2. 下载并安装 NVIDIA Toolkit
这篇教程讲的真不错,顺便记录一下我的配置过程
1、 打开网址 查找相应的 CUDA Toolkit 工具进行下载,这里我安装的是 12.1 版本
2、我选择了精简模式安装,一路默认
注意,你可能会遇到下图这样的两种安装文件,上面是驱动,下面是 Toolkit 工具。
上面这个我反反复复安装都不行。下面这个一次就好了(记得使用管理员模式打开,避免不必要的麻烦 ...
C++快速入门(三)
C++快速入门(三)
1. 高级强制类型转换
静态对象强制类型转换
先上一段代码:
我们定义一个基类 Company ,让 TechCompany 完全继承 Company 的属性(相当于一个空头公司)。这样,Company 和 TechCompany 的属性以及占用的空间大小相同。尝试用 Company 类型的指针指向 TechCompany 类型的对象,再将该指针赋值给 TechCompany 的指针。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <iostream>#include <string>class Company {public: Company(std::string theName, std::string product); virtual void printInfo();protected: std::string name; std::string pr ...










