C++ 11/14/17/20
高速上手 C++ 11/14/17/20与 C 的兼容在不得不使用 C 时,应该注意使用 extern "C" 这种特性,将 C 语言的代码与 C++代码进行分离编译,再统一链接这种做法,例如:
123456789101112131415161718192021222324252627// foo.h#ifdef __cplusplusextern "C" {#endifint add(int x, int y);#ifdef __cplusplus}#endif// foo.cint add(int x, int y) { return x+y;}// 1.1.cpp#include "foo.h"#include <iostream>#include <functional>int main() { [out = std::ref(std::cout << "Result from C code: " &l ...
多核调度算法
多级反馈队列 (MLFQ)
优先级高的任务先执行
优先级相同的任务按照时间片轮转(Round Robin)
新任务默认进入最高优先级队列
若任务再执行时配额用尽,则将其移动至下一级优先级队列。队列已用配额累计记录。
若任务在配额用尽前自愿放弃CPU,则保持在当前优先级队列
每隔一段时间,将所有任务移动至最高优先级队列配额:任务在每个优先级队列中可以执行的时间片数量
CFS (Completely Fair Scheduler)“让系统里的多有进程尽可能公平地共享处理器”
为每个进程记录精确的运行时间
中断/异常发生后,切换到运行时间最少的进程执行
下次中断/异常后,当前进程可能就不是运行时间最少的了
Linux 的选择:通过红黑树实现
键是进程的运行时间
节点是进程
左子树是运行时间更少的进程
右子树是运行时间更多的进程
根节点是运行时间最少的进程
优先级翻转
Linus:”没法解决,CFS凑合用吧”
IDLE多处理器调度的挑战既不能简单地分配线程到处理器,也不能简单地“谁空分给谁”多处理器调度的两难境地:
迁移开销
不迁移可能导致负载不均衡
其他补充知识lsto ...
【Rust】tokio
首先,我们需要了解什么是 I/O 密集型任务和 CPU 密集型任务。
CPU-bound tasks:CPU 密集型任务,指的是任务需要大量的 CPU 计算资源,而不是 I/O 操作。CPU 密集型任务的特点是 CPU 使用率高,计算时间长,I/O 操作少。
I/O-bound tasks:I/O 密集型任务,指的是任务需要大量的 I/O 操作,而不是 CPU 计算资源。I/O 密集型任务的特点是 CPU 使用率低,计算时间短,I/O 操作多。
异步编程是一种编程模型,用于处理 I/O 密集型任务。在异步编程中,任务的执行不会被阻塞,而是在等待 I/O 操作完成的过程中,可以执行其他任务。这样可以充分利用 CPU 资源,提高系统的性能。
async/await 是 Rust 语言提供的异步编程特性。通过 async/await 关键字,可以定义异步函数。异步函数可以在执行过程中暂停,等待 I/O 操作完成,然后继续执行。这样可以避免线程阻塞,提高系统的并发能力。
暂不关心底层,从高层看,#[tokio::main] 宏的作用是,启动一个 tokio 运行时,然后复制函数体给这个运行 ...
【DragonOS】DragonReach主线程优化
issue: https://github.com/DragonOS-Community/DragonReach/issues/46目前dragonreach是单线程逻辑,主循环中主要处理以下事务:1234567891011// 启动完服务后进入主循环loop { // 检查各服务运行状态 Manager::check_running_status(); // 检查cmd进程状态 Manager::check_cmd_proc(); // 检查计时器任务 TimerManager::check_timer_task(); // 监听systemctl Systemctl::ctl_listen();}主线程逻辑会一直循环,但是真正执行任务的时间很短,导致大量的cpu资源浪费。需求:用更优雅的方式去处理主循环:
阻塞读命令管道
子进程状态以及计时器任务可以使用信号等机制优化
方案設計:
在主线程中使用多线程,阻塞读取命令管道,如此主线程就不是 IO 密集型,而是 CPU 密集型
用信号机制处理子进程状态以及计时器任 ...
【DragonOS】ssh支持
调研openSSH-protable,redox-ssh,tinysshd,dropbear
数据库实践经验
错误日志分析:
aborted connection
https://www.cnblogs.com/chenjw-note/p/14362239.html
got-an-error-reading-communication-packets
https://stackoverflow.com/questions/48951549/docker-and-mysql-got-an-error-reading-communication-packets
https://blog.csdn.net/KangKangShenShen/article/details/116208961
「问题排查案例」MySQL报错Got an error reading communication packets问题分析指南
数据库卡死如果执行 DELETE FROM test_table LIMIT 1 也花费了很长时间没有反应,这表明表格可能非常大,或者存在其他问题导致删除操作非常缓慢。以下是一些建议和步骤,可以帮助你更有效地删除表格并释放空间:
检查当前活动的查询首先,检查数据库服务器上是否 ...
casdoor 使用实践
核心概念
OAuth2.0
OAuth2.0是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要分享他们的凭证。
Organization
Application
User
Provider
Application登录url如何在前端和后端代码中获取其他应用程序的URLs呢? 您可以手动连接字符串,或者调用Casdoor SDKs提供的一些实用函数来获取URL。
手动连接字符串
前端SDK
后端SDK
ProviderCasdoor是一个联合的单点登录系统,支持通过OIDC、OAuth和SAML的多个身份提供商。 Casdoor也可以通过电子邮件或短信向用户发送验证码或其他通知。 Casdoor 使用 Provider 的概念来管理所有这些第三方连接器。
Casdoor是如何自我管理的?首次运行Casdoor时,会创建一些内置对象以方便其管理:
一个内置的命名为 built-in 的组织。
built-in 组织下用户名为 admin的用户 。
一个名为app-built-in的内置应用,由built-in组织管理,代表Casdoor本身。 ...
电子书平台数据库表设计
关系型数据库——PostgresE-R Diagram1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859erDiagram BOOK { int id PK string cover_url string title string author string description int status float rating date addedDate string extension } CATEGORY { int id PK string name } BOOKCATEGORY { int bookId FK int categoryI ...