操作系统
未读多路IO复用https://blog.csdn.net/qq_46312987/article/details/124213418
零拷贝优化传统的网络编程中,将磁盘文件写入网卡需要进行四次拷贝和四次上下文切换。磁盘文件–DMA拷贝->(内核态)缓存区–CPU拷贝->(用户态)用户缓存区–CPU拷贝->(内核态)socket缓冲区–DMA拷贝->网卡。
DMA拷贝:DMA的原理是CPU将需要迁移的数据的位置告诉给DMA,包括源地址,目的地址以及需要迁移的长度,然后启动DMA设备去完成相应的操作,最后通过中断反馈给CPU,结束。
Mmap优化:mmap通过内存映射,将内存缓冲区中的数据映射到用户缓冲区,由此让用户空间共享内核空间的数据。
常用的IO模型阻塞IO:假设建立一个socket连接,如果这个连接的客户端一直不发数据,那么服务端线程将会一直阻塞在read函数上不返回。
非阻塞IO:将read函数改造成:如果没有数据到达网卡时,立即返回一个错误值,而不是阻塞地等待。这样就需要用户线程循环调用read,直到返回值不为-1,再开始处理业务。注意:非阻塞的read, ...
计算机网络
未读time_waittime_wait状态如何产生?由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。
time_wait状态产生的原因1)为实现TCP全双工连接的可靠释放假设发起主动关闭的一方(client)最后发送的ACK在网络中丢失,由于TCP协议的重传机制,执行被动关闭的一方(server)将会重发其FIN,在该FIN到达client之前,client必须维护这条连接状态,也就说这条TCP连接所对应的资源(client方的local_ip,local_port)不能被立即释放或重新分配,直到另一方重发的FIN达到之后,client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。如果主动关闭一方不维护这样一个TIME_WAIT状态,那 ...
计算机网络
未读TCP握手挥手数据传输三次握手过程第一次握手客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态(请求连接),等待服务器确认
第二次握手服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态(接收到SYN的状态,连接套接字状态);
第三次握手客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕并完成接收后,客户端和服务器进入ESTABLISHED状态(已经建立了连接状态),完成三次握手。
SYN:同步序列编号(Synchronize Sequence Numbers),是TCP/IP建立连接时使用的握手信号。ACK:确认字符(Acknowledge character),在数据通信中,接收站发给发送站的一种传输类控制字符,表示发来的数据已确认接收无误。
第三次握手就是为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误。
传输数据过程a.超时重传:超时重传机制用来保证TC ...
go的多进程虽然说可以直接用go的协程直接起子进程,但是为了保证当起子进程时父类的结构尽可能简单,变采用主进程起子进程的形式
异步起进程主进程起进程,起协程监听子进程的执行情况,可以使后台的子进程跑满制定数量
123456789101112131415161718192021222324252627282930313233343536373839404142package mainimport ( "log" "os" "strconv")var processChan = make(chan int, 10)func processListen(process *os.Process) { p, _ := process.Wait() exitCode := p.ExitCode() log.Println("process finish ExitCode: ", exitCode) <-processChan}func main() { poolsize := 8 f ...
计算机网络
未读TCP与UDP的区别TCPTCP的优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点:慢,效率低,占用系统资源高,易被攻击TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
什么时候应该使用TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输
UDPUDP的优 ...
计算机网络
未读SSL握手过程本质SSL握手过程的本质是在协商对称加密的秘钥。HTTPS协议的安全机制是靠SSL来实现的(SSL位于应用层和传输层之间)
为了保证数据的安全性,在数据发送前需要对数据进行加密。传统的对称加密,协商秘钥过程如果被窃听导致秘钥泄露,加密的数据也就变得“公开透明”了,而使用非对称加密的方式效率较低。因此,在SSL中采用“对称加密个非对称加密结合”的方法保证数据的安全性,即非对称加密进行对称加密秘钥的协商,而这个协商过程就可以认为是SSL握手。
过程1.客户端给服务器端发送协议版本、客户端支持的加密算法、一个随机数1。2.服务器端选择加密算法,并向客户端发送一个服务器数字证书和一个随机数2。3.客户端使用数字证书中的公钥,将随机数3加密发送给服务器。4.服务器使用私钥对随机数字3解密。5.服务器端和客户端通过事先协商好的加密算法,对这三个随机数进行加密生成“对话秘钥”(session key)即对称加密的秘钥,用于接下来整个对话过程的加密。
http协议无状态协议以及解决方案http本身是一种无状态协议
无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。
http与https的区别HTTP的URL以http:// 开头,而HTTPS 的URL 以https://开头HTTP是不安全的,而HTTPS是安全的HTTP标准端口是80 ,而HTTPS的标准端口是443在OSI网络模型中,HTTP工作于应用层,而HTTPS的安全传输机制工作在传输层HTTP无法加密,而HTTPS对传输的数据进行加密HTTP无需证书,而HTTPS需要CA机构wosign的颁发的SSL证书
计算机语言
未读C++中的constexprhttps://blog.csdn.net/m0_52902391/article/details/120308866https://zhxilin.github.io/post/tech_stack/1_programming_language/modern_cpp/cpp17/constexpr/#c14-constexpr
常量表达式值不会改变且在编译期就能得到计算结果的表达式。字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
constexpr 与 const在定义常量时,const 和 constexpr 是等价的,都可以在程序的编译阶段计算出结果 都为常量表达式但是const可以修饰函数的传入参数为只读(并非常量),而constexpr无法修饰
12345678910111213141516 // errorvoid func1(constexpr int p) {}// okvoid func2(const int p) {}void func3(const int p) ...
kafka日常操作kafka查看数据查看所有topic1./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list
查看所有group1./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list
查看指定topic的订阅信息1./kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic XXXXX
消费指定group的订阅信息1./kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --group XXXXX --describe
查看从当前当前开始到结束,kafka中指定topic接收到的信息1./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic XXXXX
查看所有kafka中接收到的信息1./kafka-console-consume ...
URIURI是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成:①访问资源的命名机制②存放资源的主机名③资源自身的名称,由路径表示,着重强调于资源。URLURL是uniform resource locator,统一资源定位器,表示资源的地点。可见 URL是 URI 的子集。URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成:①协议(或称为服务方式)②存有该资源的主机IP地址(有时也包括端口号)③主机资源的具体地址。如目录和文件名等
计算机网络
未读http的作用和RPCHTTPHTTP是一个协议,超文本传输协议,它基于TCP/IP来传输文本、图片、视频、音频等。HTTP不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的传输和它没关系,这些是TCP/IP负责。传输信息需要一种格式,http规定了一种通信格式,让任何服务器和客户端之间都能顺利交流,减少交互成本。http协议的格式很像我们的信封,有个固定的格式。所以其本质上就是客户端和服务端约定好的一种通信格式。
RPCrpc 是应用层由用户自己在制定的协议
HTTP和RPC区别HTTP指的是通信协议。而RPC则是远程调用协议,其对应的是本地调用。RPC的通信可以使用用HTTP协议,也可以自定义协议,是不做约束的。
那为什么要有RPC?为什么要用RPC,直接使用WebClient HTTP调用不行么。其实RPC调用是因为服务的拆分,或者本身公司内部的多个服务之间的通信。服务的拆分独立部署,那服务间的调用就必然需要网络通信,用WebClient调用当然可行,但是比较麻烦。我们想即使服务被拆分了但是使用起来还是和之前本地调用一样方便。所以就出现了RPC框架, ...








