网络编程中 TCP_NODELAY 可以缩短通讯时延。 如果TCP_NODELAY=FALSE, 则打开Nagle 算法,通过延时减少数据包发送数量以解决网络拥堵。
具体的做法就是:
如果发送内容大于等于 1 个 MSS, 立即发送;
如果之前没有包未被 ACK, 立即发送;
如果之前有包未被 ACK, 缓存发送内容;
如果收到 ACK, 立即发送缓存的内容。(MSS 为 TCP 数据包每次能够传输的最大数据分段)
TCP Delayed ACK(延迟确认)就是为了努力改善网络性能,来解决这个问题的,它将几个 ACK 响应组合合在一起成为单个响应,或者将 ACK 响应与响应数据一起发送给对方,从而减少协议开销。
具体的做法是:
当有响应数据要发送时,ACK 会随响应数据立即发送给对方;
如果没有响应数据,ACK 将会延迟发送,以等待看是否有响应数据可以一起发送。在 Linux 系统中,默认这个延迟时间是 40ms;
如果在等待发送 ACK 期间,对方的第二个数据包又到达了,这时要立即发送 ACK。但是如果对方的三个数据包相继到达,第三个数据段到达时是否立即发送 ACK,则取决于以上两条。
当TCP_NODELAY 和 TCP DELAYED ACK 同时生效时,会发生相互等待导致网络延时。
--------------------------------------------------------------------
每个thread有自己的副本threadLocal, threadLocal是存在threadLocalMap中,以threadLocal为key,值为value。 threadLocal的get, set方法可以看作对threadLocalMap的封装。new ThreadLocal<T>() 指定泛型。使用完之后,要使用threadLocal.remove() 方法清理,避免内存泄漏。
--------------------------------------------------------------------
乐观锁的原理基本上是先取值,然后插入的时候有个原子操作(比较值并更新值),如果比较值与原取值不变即成功更新,否则失败。在JAVA里实现CAS,例子AtomicInteger等。
//var1 是this指针
//var2 是地址偏移量
//var4 是自增的数值,是自增1还是自增N
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
//获取内存值,这是内存值已经是旧的,假设我们称作期望值E
var5 = this.getIntVolatile(var1, var2);
//compareAndSwapInt方法是重点,
//var5是期望值,var5 + var4是要更新的值
//这个操作就是调用CAS的JNI,每个线程将自己内存里的内存值M
//与var5期望值E作比较,如果相同将内存值M更新为var5 + var4,否则做自旋操作
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
CAS适合资源竞争不大的情况,因为不使用synchronized悲观锁,提升性能,如果资源竞争大,大量线程同时自旋,将影响服务器的正常运转。
--------------------------------------------------------------------
ThreadPoolExecutor 的参数说明与使用
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
}
1)corePoolSize 核心线程数
2)maximumPoolSize 最大线程数
3)keepAliveTime 空闲线程存活时间
4)unit 存活时间单位
5)workQueue 等待队列
6)threadFactory 线程工厂
7)handler 拒绝策略
ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 3, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1));
四种情况:
1)任务数小于corePoolSize, 创建线程执行
2)任务数大于corePoolSize, 多余的任务小于workQueue长度, 进入workQueue等待
3)任务数大于corePoolSize, 多余的任务大于workQueue,额外的小于maximumPoolSize-corePoolSize,创建新线程执行
4)任务数大于maximumPoolSize+workQueue,执行handler拒绝策略
--------------------------------------------------------------------
聚集索引是数据和索引在一起,数据的物理顺序和逻辑顺序一致,因此只能有一个聚集索引(但可以包含多列)。非聚集索引是额外建索引表,索引顺序与数据的物理顺序不一致,通常都是这种索引。聚集索引的优点是只需一次查表,缺点是如果索引列频繁变动,造成数据的物理位置变化,影响性能。非聚合索引一般情况下都要查两次表,先查索引,然后查数据。当然如果索引表覆盖了查询的字段,就无需二次查表了。
--------------------------------------------------------------------
信号量限流与线程池限流
线程池上面已经讲过了,使用线程池限流,主要有线程池自动管理完成,超出最大线程数就被拒绝策略拒绝了,达到了限流的目的。信号量限流,主要是靠手动去获取令牌,如果获取到,则开启线程执行,如果未获取到则阻塞,直到有令牌被释放而获取到。两者的方式都应该属于令牌桶限流,还有一种限流方式是漏桶限流,是平滑后端处理的,一般不用到,有兴趣可以自行查阅。
--------------------------------------------------------------------
CAP的理解
C 一致性 A可用性 P分区容错性
单机满足 CP, 做不到高可用
多机情况下必然存在P, 当部分节点故障时,只能在CA之间选择, 选择C,系统持续等待同步,不可用。 选择A, 不能在故障时间内做到一致。
分享到:
相关推荐
以上是对给定文件中提到的基础知识点的详细解释,涵盖了计算机编程领域的多个方面,包括语言、文件类型以及相关的开发流程和技术细节。这些知识点对于理解计算机科学的基本概念和技术有着重要的意义。
标题中的“大数据云计算技术 Hadoop运维杂记”表明这是一份关于Hadoop在大数据云计算环境下的运维实践文档。Hadoop是Apache基金会开发的一个开源框架,主要用于处理和存储大规模数据,尤其适合于处理非结构化和半...
大数据云计算技术 Hadoop运维杂记(共21页).pptx 大数据云计算技术 暴风集团基于hadoop的数据平台总体架构简介(共18页).ppt 大数据云计算技术 淘宝网Hadoop与数据分析 taobao数据团队(共30页).ppt 大数据云计算...
在现代电子技术的学习与应用中,51单片机始终扮演着重要的角色。它是许多电子爱好者和工程技术人员踏入电子世界大门的...对于那些渴望学习和掌握51单片机技术的初学者来说,这本学习杂记无疑是开启电子世界大门的钥匙。
51单片机是微电子技术领域中一种广泛使用的微控制器,因其内核为Intel的8051而得名。这款单片机以其结构简单、功能强大、性价比高而深受初学者和工程师喜爱,是电子爱好者和硬件开发者的入门首选。本资料“51单片机...
**P89V51中文数据手册**提供了详尽的技术规格和操作指南,包括引脚功能、内部结构、指令集、中断系统、电源管理等,是理解和使用P89V51的必备资料。通过阅读手册,开发者可以了解单片机的工作原理,掌握如何编程和...
### 单片机C语言学习杂记 #### 一、单片机与C语言简介 在电子技术领域,单片机是一种集成了微处理器、存储器以及多种输入输出接口的微型计算机系统。51单片机是基于MCS-51架构的一种广泛使用的单片机型。由于其...
包括 VC技术内幕第五版.chm VC知识库五.chm VC知识库六.chm VC知识库七.chm希望大家从中受益,相互交流,学问最重要的是交流,而不是相互抵斥团结起来我们的程序员兄弟们 世俗烦恼处,要耐的下 世事纷扰处,要闲的下...
在本项目中,"ddddocr杂记,使用ddddocr、flask" 主要涉及的是一个基于Python的OCR(Optical Character Recognition,光学字符识别)应用,利用ddddocr库进行文字识别,并结合Flask框架构建了一个后端服务。...
### 互联网杂记(三)知识点总结 #### 1. 流程简单化与用户体验优化 - **背景**: 在互联网产品的设计中,用户体验至关重要。**流程简单化**被视为提升用户体验的有效方式之一。 - **核心思想**: “让用户尽快离开”...
用python爬虫抓站的一些技巧总结_observer专栏杂记.pdf
总体来看,互联网创业的成功依赖于众多因素,包括但不限于团队合作、风险投资策略、角色定位和合伙协议、技术与商业的平衡,以及社区管理的智慧。任何想要在这个领域取得成功的人,都应该对上述要点进行深入的思考和...
- **技术应用**:利用自然语言处理技术对文本进行分析,从而实现精准的内容推荐。 - **用户体验优化**:通过不断优化算法模型,提升内容质量,增强用户的粘性和活跃度。 ### 4. 需求驱动下的互联网产品发展 #### ...
### QML杂记 Qt_Quick中文手册精要 #### 一、引言 QML(Qt Markup Language)是一种声明式的编程语言,专为Qt框架设计,用于构建动态且丰富的用户界面。Qt Quick作为Qt框架的一个核心组成部分,提供了一系列高级的...
【标题】:“杂记”涉及了多个IT领域的知识点,包括数据库、Unix服务、Unix工具、Linux系统管理和配置、密码学以及开发运维。 【数据库】:PostgreSQL和MySQL是两种广泛使用的开源关系型数据库管理系统(RDBMS)。...
《InstallshieldX安装制作杂记:实例之自定义对话框》 在软件开发过程中,创建一个用户友好的安装过程是至关重要的。Installshield是一款强大的安装制作工具,它可以帮助开发者构建专业级别的安装包,同时提供了...
总的来说,Rgss3a文件的解包是游戏开发和定制过程中的一项技术性工作,它依赖于专门的工具和对RPG Maker系统内部机制的理解。通过解包,开发者和玩家可以深入了解游戏的内部运作,进行个性化定制,但也需要谨慎对待...
malloc()和free()在glibc内部使用了内存池技术,这样可以减少频繁的系统调用,提高效率。在内存释放后,glibc可能不会立即归还给内核,而是等待一定数量的内存积累后再进行批量操作。 Linux内核使用Buddy算法来高效...
### Delphi 学习杂记知识点汇总 #### 一、为控件添加边框 **知识点:** 在 Delphi 中,可以通过重写 `WM_NCPAINT` 消息来为窗体添加自定义的非客户区绘制效果,例如添加边框。 **代码示例:** ```delphi ...
在C#编程中,多线程是实现并发执行任务的关键技术。这允许程序同时处理多个独立的任务,提高程序的响应速度和系统资源的利用率。本文将深入探讨C#中的线程概念、创建与管理线程的方法,以及线程访问控制的相关知识。...