KalosAner Blog

「山穷水复疑无路,柳暗花明又一村。」

IO复用之 select

一、引言 I/O 复用是指一个进程维护多个 I/O 套接字。传统的通信可能每个套接字都需要一个进程维护,这样会占用更多的资源(进程需要分配内存),由于在服务过程中等待通信会占用大量的时候导致进程闲置,所以可以使用一个进程维护多个套接字。I/O 复用有多种方法:select、poll、epoll(Linux 专用)、kqueue(macOS/FreeBSD专用)、IOCP(Windows专用...

Writes and Write-Nots

原文: Writes and Write-Nots I’m usually reluctant to make predictions about technology, but I feel fairly confident about this one: in a couple decades there won’t be many people who can write. On...

SQL best practices – don’t compare count(*) with 0

原文: SQL best practices – don’t compare count(*) with 0 Every now and then I see something like this: 1 2 SELECT u.* FROM users u WHERE 0 = (SELECT COUNT(*) FROM addresses a WHERE a.user_id = u....

进程间通信之管道

一、引言 进程是内存分配的最小单位,所以每个进程之间的数据都是隔离的,但是有时候进程之间又需要通信,这时候就需要用到进程通信技术。 进程之间通信主要有几种技术:管道、消息队列、共享内存、信号量、信号、套接字、内存映射和远程过程调用。 二、管道 管道分为有名管道和无名管道。管道都是半双工通信,如果需要实现全双工通信需要使用两个管道。 shell 中的 ls -l | grep ...

多进程编程基础

一、引言 本文简单介绍一下多进程编程,Linux 系统提供多进程的系统调用 fork。多进程主要用来并行地执行任务,对于多核 CPU,当 CPU 有空余的核时就会并行地执行其中一个进程,如果没有多余的核时就会分时执行。进程是分配资源的最小单位。每个进程都有一个 PID 和 PPID,其值为大于 2 的整数。PID 为 1 的是 systemd 进程(之前叫做 init 进程),它是所有进程...

一键配置 LunarVim

一、引言 LazyVim 和 LunarVim 是两种流行的 Neovim 配置框架。LazyVim 是为那些喜欢最小配置但希望轻松扩展的用户设计的。LunarVim 是为那些想要一个功能丰富的 Neovim 环境而无需过多配置的用户设计的。它提供了许多默认的开发工具和插件,致力于成为一个“IDE-like”的编辑器。 LunarVim 的整个配置过程都可以通过命令行来完成,所以理论上可...

套接字的多种可选项

一、引言 套接字有很多可选项,可以用来自定义细节。 1、通用套接字选项 协议层 选项名 作用 可读(R) 可写(W) SOL_SOCKET SO_REUSEADDR 允许重用本地地址和端口(防止绑定失败)。 是 是 ...

虚拟机启动提示无法连接虚拟设备 sata

一、引言 虚拟机每次开机都提示:无法连接虚拟设备 sata,如下图。 二、原因 打开虚拟机设置可看到 “启动时连接”,下边的“连接”框可以选择连接的设备,默认这个会连接物理驱动器,但是我没有插入物理驱动器,所以会提示无法连接。 如果选择使用 ISO 映像文件就会出现如下界面。 重启虚拟机时一直按着 shift 也会出现这个界面。 三、解决 如果想直接进入虚拟...

套接字连接与优雅地退出

一、建立连接和退出连接 TCP 会通过三次握手和四次挥手保证安全地建立连接和退出连接。 三次握手一般由 主机A 发送 SEQ=1000 的 TCP 报文给 主机B,主机B 收到 主机A 的 TCP 报文之后发送 SEQ=2000、ACK=1001 的 TCP 报文表示收到了来自 主机A 的连接请求,然后 主机A 再发送一个 SEQ=1001、ACK=2001 的 TCP 报文表示收到了来...

修改 Shell 中的 Tab 宽度为 4

Shell 中 Tab 宽度默认为 8,在使用 cat 查看代码文件时 Tab 默认就是 Shell 的 Tab 宽度,可以通过修改 ~/.bashrc 文件设置为 4。 1 nvim ~/.bashrc 在文件末尾添加 1 tabs 4 保存并退出之后重新加载配置。 1 source ~/.bashrc 然后就可以。