网络编程 线程 通讯 网络

网络协议

常见的网络协议有:TCP/IP协议、UDP协议、HTTP协议、FTP协议、Telnet协议、SMTP协议、NFS协议等。这里主要简述一下HTTP协议。 1.什么是HTTP协议? 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行 ......
网络

保证线程安全的10个小技巧

前言 对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题。 线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题。 比如:变量a=0,线程1给该变量+1,线程2也给该变量+1。此时,线程3获取a的值有可能不是2,而是1。线程3这不就 ......
线程 技巧

浅析 Jetty 中的线程优化思路

本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill),在不出现线程饥饿的情况下尽量用同一个线程... ......
线程 思路 Jetty

SimpleDateFormat 线程不安全!使用DateTimeFormatter

1、报错原因: (1)、SimpleDateFormat 是线程不安全的 (2)、代码想把格林威治时间转换成yyyy-MM-dd HH:mm:ss 报错 Exception in thread :java.lang.NumberFormatException: For input string: " ......

HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本的协议。它是Web应用程序之间数据交换的基础,并且也被广泛用于其他应用程序之间的通信。

HTTP(Hypertext Transfer Protocol)是一种用于在网络上传输超文本的协议。它是Web应用程序之间数据交换的基础,并且也被广泛用于其他应用程序之间的通信。 HTTP基于客户端-服务器模型,其中客户端发起请求,而服务器响应请求并返回相应的数据。它使用TCP/IP作为底层传输协 ......

RESTful API(Representational State Transfer API)是一种设计和构建网络应用程序的软件架构风格。它是一种基于HTTP协议的API设计理念,旨在实现系统的可伸缩性、简洁性、可靠性和可扩展性。

RESTful API(Representational State Transfer API)是一种设计和构建网络应用程序的软件架构风格。它是一种基于HTTP协议的API设计理念,旨在实现系统的可伸缩性、简洁性、可靠性和可扩展性。 RESTful API 的设计原则可以概括为以下几点: **资源* ......

IPMI(Intelligent Platform Management Interface)是一种远程管理接口标准,用于监控和管理计算机系统。它提供了一套标准的命令和协议,使管理员可以通过网络对服务器和其他支持IPMI的设备进行远程管理

IPMI(Intelligent Platform Management Interface)是一种远程管理接口标准,用于监控和管理计算机系统。它提供了一套标准的命令和协议,使管理员可以通过网络对服务器和其他支持IPMI的设备进行远程管理。 IPMI为数据中心提供了以下主要功能: **远程监控**: ......

【网络】【HTTP】既然有 HTTP 协议,为什么还要有 WebSocket?

1 前言 平时我们打开网页,比如购物网站某宝。都是点一下「列表商品」,跳转一下网页就到了「商品详情」。 从 HTTP 协议的角度来看,就是点一下网页上的某个按钮,前端发一次 HTTP请 求,网站返回一次 HTTP 响应。这种由客户端主动请求,服务器响应的方式也满足大部分网页的功能场景。 但有没有发现 ......
HTTP WebSocket 网络

Linux多线程10-死锁

有时,一个线程需要同时访问两个或更多不同的共享资源,而每个资源又都由不同的互斥量管理。当超过一个线程加锁同一组互斥量时,就有可能发生死锁。 两个或两个以上的进程在执行过程中,因争夺共享资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。 死锁的 ......
线程 Linux 10

Linux多线程09-互斥锁

- 为避免线程更新共享变量时出现问题,可以使用互斥量(mutex 是 mutual exclusion的缩写)来确保同时仅有一个线程可以访问某项共享资源。可以使用互斥量来保证对任意共享资源的原子访问。 - 互斥量有两种状态:已锁定(locked)和未锁定(unlocked)。任何时候,至多只有一个线 ......
线程 Linux 09

Linux多线程11-读写锁

当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。 但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问 ......
线程 Linux 11

Linux多线程13-条件变量

上节代码存在的问题: 生产者已经没有数据了, 消费者还在while循环判断是否有数据,浪费资源 没有数据了应该通知生产者生产,生产好了通知消费者消费 这就需要条件变量 pthread_cond_t ```c int pthread_cond_init(pthread_cond_t *restrict ......
线程 变量 条件 Linux 13

Linux多线程14-信号量

信号量的类型 sem_t ```c int sem_init(sem_t *sem, int pshared, unsigned int value); 初始化信号量 参数: - sem: 信号量变量地址 - pshared: 0 用在线程间, 非0 用在进程间 - value: 信号量中的值 in ......
线程 信号 Linux 14

Linux多线程12-生产者和消费者模型

![image](https://img2023.cnblogs.com/blog/894919/202306/894919-20230626085900099-1696309927.png) 一个最简单的生产者消费者模型 ```c /* 生产者消费者模型(粗略版) */ #include #inc ......
生产者 线程 模型 消费者 Linux

[ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建

搭建一个嵌入式开发环境主要包括以下几个部分: 1. 安装交叉编译器 2. 配置集成开发环境(IDE) 3. 安装调试工具 4. 下载和烧录程序 接下来,我们将详细介绍每个部分,并提供相应的实例。 1. **安装交叉编译器** 交叉编译器是用于将您编写的ARM汇编代码编译成可执行文件的工具。在本教程中 ......
嵌入式 实战 ARM 部分 环境

Linux多线程01-线程概述

### 线程概述 - 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序 中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多 ......
线程 Linux 01

Linux多线程02-创建线程

### pthread_create 描述: > pthread_create() 函数在调用进程中创建一个新的线程。新线程通过调用 start_routine() 开始执行,arg 作为 start_routine() 的唯一参数传递。 新线程以以下方式之一终止: - 调用 pthread_exi ......
线程 Linux 02

Linux多线程03-终止线程

### pthread_exit 和 pthread_self 和 pthread_equal 描述: #### **pthread_exit** > pthread_exit() 函数终止调用该函数的线程,并通过retval返回一个值,如果该线程是可连接的,则在同一进程中调用pthread_joi ......
线程 Linux 03

Linux多线程06-线程取消

### pthread_cancel 描述: > pthread_cancel()函数向线程thread发送一个取消请求。目标线程对取消请求的响应取决于该线程控制的两个属性:其取消状态和类型。 一个线程的取消状态由pthread_setcancelstate(3)确定,可以启用(对于新线程而言是默认 ......
线程 Linux 06

Linux多线程07-线程属性

线程属性类型: pthread_attr_t 描述: pthread_attr_setdetachstate() 函数 将由 attr 引用的线程属性对象的分离状态属性设置为 detachstate 中指定的值。分离状态属性确定使用线程属性对象 attr 创建的线程将在可连接状态还是分离状态下创建。 ......
线程 属性 Linux 07

Linux多线程08-线程同步

一个多线程售票示例: ```c // 三个窗口, 共100张票 #include #include #include int tickets = 100; //所有线程都共享这100张票 void* sellticket(void* arg){ // 卖票 while(tickets>0){ usl ......
线程 Linux 08

Linux多线程05-线程的分离

### pthread_detach 描述: > pthread_detach()函数将由thread标识的线程标记为已分离。当一个分离的线程终止时,它的资源会自动释放回系统,而不需要另一个线程与已终止的线程加入。尝试分离一个已经分离的线程会导致未指定的行为。 ```c #include int p ......
线程 Linux 05

Linux多线程04-连接已终止的线程

### pthread_join 描述: > pthread_join() 函数等待由 thread 指定的线程终止。如果该线程已经终止,则pthread_join()将立即返回。由thread指定的线程必须是可连接的。 如果retval不为NULL,则pthread_join()将目标线程的退出状 ......
线程 Linux 04

未来的编程语言「GitHub 热点速览」

![](https://img2023.cnblogs.com/blog/759200/202306/759200-20230626001936909-2117286353.jpg) 又一个编程语言火了,不算新,因为它已经开发了一段时间。不过在本周 Hacker News 上风头十足,DreamBe ......
编程语言 语言 热点 GitHub

【网络】【HTTP】既然有 HTTP 协议,为什么还要有 RPC?

1 前言 我想起了我刚工作的时候,第一次接触 RPC 协议,当时就很懵,我 HTTP 协议用的好好的,为什么还要用 RPC 协议? 于是就到网上去搜。 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们不认识的概念去解释另外一个我们不认识的概念,懂的人不需要看 ......
HTTP 网络 RPC

SpringBoot 中的多线程事务处理(自定义注解)

前言 我们开发的时候常常会遇到多线程事务的问题。以为添加了@Transactional注解就行了,其实你加了注解之后会发现事务失效。 原因:数据库连接spring是放在threadLocal里面,多线程场景下,拿到的数据库连接是不一样的,即是属于不同事务。 本文是基于springboot的@Asyn ......
注解 线程 SpringBoot 事务

【网络】【HTTP】HTTP/3 强势来袭

1 前言 HTTP/3 还没正式推出,不过自 2017 年起,HTTP/3 已经更新到 34 个草案了,基本的特性已经确定下来了,对于包格式可能后续会有变化。 所以,这次 HTTP/3 介绍不会涉及到包格式,只说它的特性。 2 美中不足的 HTTP/2 HTTP/2 通过头部压缩、二进制编码、多路复 ......
HTTP 强势 网络

【网络】【HTTP】HTTP/2 牛逼在哪?

1 前言 这节我们来看看HTTP2,一起来看看 HTTP/2 牛逼在哪? 2 HTTP/1.1 协议的性能问题 我们得先要了解下 HTTP/1.1 协议存在的性能问题,因为 HTTP/2 协议就是把这些性能问题逐个攻破了。 现在的站点相比以前变化太多了,比如: 消息的大小变大了,从几 KB 大小的消 ......
HTTP 网络

【网络】【HTTP】HTTPS 如何优化?

1 前言 由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议,给应用数据套了个「保护伞」,提高安全性的同时也带来了性能消耗。 因为 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程,目的是为了通过非对称加密握手协商或者交换出对称加密密钥,这个过程最长可以花费掉 2 RTT ......
HTTPS 网络 HTTP

【网络】【HTTP】HTTPS ECDHE 握手解析

1 前言 HTTPS 常用的密钥交换算法有两种,分别是 RSA 和 ECDHE 算法。 其中,RSA 是比较传统的密钥交换算法,它不具备前向安全的性质,因此现在很少服务器使用的。而 ECDHE 算法具有前向安全,所以被广泛使用。 上节我们看了了 RSA 握手的过程,这节我们来看看 ECDHE 算法。 ......
ECDHE HTTPS 网络 HTTP