编辑
2023-12-03
操作系统
0

网络进程中的通讯

本地的进程间通信(IPC)有很多种方式,但可以概括为以下4类:

  • 消息传递(管道、FIFO、消息队列)
  • 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
  • 共享内存(匿名的和具名的)
  • 远程过程调用(Solaris门和Sun RPC)

在本地环境中,我们可以通过进程PID来唯一标识一个进程,但是在网络通信过程中,首要问题在于如何唯一标识一个进程,这是通信的基础。TCP/IP协议族为我们解决了这个问题,通过网络层的“IP地址”唯一标识主机以及传输层的“协议+端口”唯一标识主机中的应用程序(进程)。这样,利用三元组(IP地址,协议,端口),我们就能够唯一标识网络中的进程,从而实现进程间的通信。这种方式使得各个进程可以利用这个标识与其他进程进行交互。目前使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket。

编辑
2023-11-28
服务端
0

记录了下在日常工作中 MySQL开发过程中的一些基本规范,不断完善中。

基本规范

mysql5.5之前默认的存储的引擎是MYISAM,目前默认的是innodb(innodb好处支持事务,行级锁,高并发下性能更好,对多核,大内存硬件支持更好)

【强制】禁止使用线上库表做压力测试。

【推荐】注意控制单表数据量的大小,数据量特别大(通常数据量超过上亿条,占用空间超过 10G)会造成写入性能降低,表结构修改,备份和恢复都会有很大的性能隐患,需要应用根据业务特点,预估业务数据增涨速度,用历史数据归档和分库分表等手段来控制数据量大小。

【推荐】单条记录的大小不要超过8kb。

  • 从索引角度来看,InnoDB的页块大小默认为16KB。这意味着每个页块中至少可以存放两行数据,这是为了保持B+树结构的有效性。因此,单行数据的大小受到了这个限制,通常不应超过页块大小的一半,即8KB。如果单行数据超过了这个限制,就会导致每个页块中只能存放一行数据,这会降低B+树的效率,使得索引的性能下降(每个页中只有一条数据,整个树就成了一条双向链表)。
  • 从硬盘扇区大小的角度来看,硬盘的扇区大小通常为4KB,这意味着单条记录的大小不应超过扇区大小。如果单条记录过大,查询时可能会跨越多个扇区,增加磁盘I/O的开销,从而降低查询性能。
编辑
2023-11-14
服务端
0

操作系统知识和概念

并行与并发

并行并发其实是不同的概念,官方有专门的介绍视频,大家有兴趣可以去看看。我个人是这么理解:

  • 并行:同一时刻执行多个任务。通过多核的 CPU 可以让多个任务做到真正意义上的同时运行,每个任务都在不同的处理器核心或线程中运行。
  • 并发:同一时间段内执行多个任务。通过时间片或者让出控制权来实现任务切换,达到“同时”运行多个任务的目的。其本质是在任意时刻都只有一个任务处于执行态中,而在其余任务则是通过某种算法等待被唤醒执行。

我们以 Node.js 为例来理解并发和并行的概念。

  • 并发:在 Node.js 中,通过事件驱动的非阻塞I/O模型,实现了高并发的处理能力。当一个请求到达时,Node.js 将会创建一个事件,并将其放入事件队列中。然后,Node.js 会立即继续处理下一个请求,而不会等待前一个请求的I/O操作完成。这样,在等待I/O操作返回结果的过程中,Node.js 能够继续处理其他请求,充分利用了CPU的空闲时间,提高了系统的吞吐量和响应速度。这种利用事件循环的方式来处理多个请求的方式就是并发。
  • 并行:在 Node.js 中,可以通过像 PM2 这样的工具来创建多个 Node.js 进程或者集群,每个进程都可以独立处理请求。这样一来,不同的请求可以被分配到不同的进程上处理,从而实现真正的并行处理。通过这种方式,可以充分利用多核CPU的性能,提高系统的并发能力和处理能力。

在开发中,同步和异步是两种常见的方法调用方式,它们在处理任务时有着不同的执行方式和特点。

编辑
2023-10-02
服务端
0

背景

分布式系统特性

随着计算机技术的不断进步和相关应用规模的迅速扩大,传统的集中式系统已逐渐被分布式系统所取代(集中式的系统架构存在诸多单点问题),以适应大型互联网应用的需求。分布式系统具有以下特点:多节点分布、对等性、并发性、全局时钟难以定义以及故障的不可避免性。

  • 分布性:多台计算机在空间上自由分布,且随时可能发生变动。
  • 对等性:分布式计算机不一定区分主从关系,有些情况下组成分布式系统的计算机节点是对等的。
  • 并发性:同一个分布式系统的多个节点可能同时对共享资源进行操作。
  • 全局时钟:在分布式系统中很难准确定义时间先后关系,因此需要全局时钟序列。
  • 故障总是会发生:节点故障、通信异常、网络分区(俗称脑裂)、三态(成功/失败/未知)都是常见的问题。
编辑
2023-09-09
服务端
0

前言

在编程领域中,设计模式是针对特定问题的可重复解决方案。设计模式可以帮助程序员解决常见的设计问题,提高代码的可维护性、复用性和可扩展性。设计模式不是具体的代码,而是一种通用的解决方案模板,它提供了一套经过验证的方法,用于解决特定类型的问题。