![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 77
咚伢
linux C
展开
-
ubuntu16 go语言环境搭建和踩坑
基于ubuntu的go语言学习环境搭建以及踩坑原创 2022-02-22 22:24:47 · 205 阅读 · 0 评论 -
nginx惊群问题解决原理和负载均衡实现
nginx学习笔记——惊群问题和负载均衡实现原创 2022-01-09 17:31:31 · 1275 阅读 · 0 评论 -
深入Linux系列(3)锁与进程通信
锁与进程通信内核控制机制竞态条件几个进程在访问资源的时候彼此干扰的情况通常称为竞态条件(race condition)。由于导致竞态条件的情况非常罕见,因此需要提出一个问题:是否值得做一些(有时候是大量的)工作来保护代码避免竞态条件。在某些环境中(比如航空飞机的控制系统、重要机械的监控、危险装备),竞态条件是致命问题。临界区每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。内核锁机制内核可以不受限制地访问整个地址空间。原创 2021-12-29 22:59:31 · 421 阅读 · 0 评论 -
深入Linux系列(2)进程调度
进程调度调度器核心调度器调度器的实现基于两个函数:周期性调度器函数和主调度器函数。这些函数根据现有进程的优先级分配CPU时间。这也是为什么整个方法称之为优先调度的原因。周期性调度器函数周期性调度器在scheduler_tick中实现,如果系统正在活动中,内核会按照频率HZ自动调用该函数。该函数主要有两个任务如下:更新相关统计量:管理内核中与整个系统和各个进程的调度相关的统计量。其间执行的主要操作是对各种计数器+1激活负责当前进程的调度类的周期性调度方法更新统计量函数:update_rq原创 2021-12-29 22:56:59 · 417 阅读 · 0 评论 -
深入Linux系列(1)进程原理
Linux 进程原理进程原理进程 Linux内核把进程称为任务(task),进程的虚拟地址空间分为用户虚拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,每个进程有独立的用户空间虚拟地址空间。 进程大致有两种特殊的形式内核进程:没有用户虚拟地址空间的进程用户进程:有用户虚拟地址空间的进程共享同一个用户虚拟地址空间的所有进程我们称之位一个线程组进程的四要素有一段程序供其执行有进程专用的系统堆栈空间在内核用task_struct数据结构维护有独立存储空间,拥有专有的用原创 2021-12-26 12:51:56 · 930 阅读 · 0 评论 -
协程的实现思路与原理
协程的实现思路与原理为什么要有协程以同步的方式实现异步的效率,同步的效率低综合同步和异步的优势异步方式发数据socketconnect 服务器设置协议sendfd ADD epoll接数据epoll_wait()read fd解析对应数据上面两个流程是异步的。那么如何使用同步的方式实现异步的效率? 我们引入yield 和 resume原语。yield 为让出,resume为恢复那么流程就变成如下:发数据socketconnect 服务器设置协议sen原创 2021-08-16 22:40:28 · 346 阅读 · 0 评论 -
无锁CAS及无锁队列实现
CAS⽐较并交换(compare and swap, CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据 交换操作,从⽽避免多线程同时改写某⼀数据时由于执⾏顺序不确定性以及中断的不可预知性产⽣的数据 不⼀致问题。 该操作通过将内存中的值与指定数据进⾏⽐较,当数值⼀样时将内存中的数据替换为新的值。bool CAS( int * pAddr, int nExpected, int nNew )atomically { if ( *pAddr == nExpected ) {原创 2021-07-13 02:00:10 · 391 阅读 · 0 评论 -
常见锁使用(互斥,读写,自选,原子操作)以及CAS原理简介
锁 posix api为什么需要锁?数据竞争,不加锁数据修改的结果不一定为理想结果。(原子操作执行顺序可能会不同)例子#include <stdio.h>#include <pthread.h>#include <unistd.h>#define THREAD_SIZE 10int count = 0;void *func(void *arg) { int *pcount = (int *)arg; int i = 0;原创 2021-07-11 13:37:18 · 267 阅读 · 0 评论 -
定时器设计以及最小堆定时器方案实现
定时器概述定时器在服务端的应用对于服务端来说,驱动服务端逻辑的事件主要有两个,⼀个是⽹络事件,另⼀个是时间事件;在不同框架中,这两种事件有不同的实现⽅式;第⼀种,⽹络事件和时间事件在⼀个线程当中配合使⽤;例如nginx、redis;// 第⼀种 伪代码while (!quit) { int now = get_now_time();// 单位:ms int timeout = get_nearest_timer() - now; if (timeout < 0) timeout原创 2021-07-11 11:10:13 · 477 阅读 · 0 评论 -
reactor模型原理以及采用epoll的简单实现
reactor 模型UMLReactor模式是处理并发IO的常见模式,用于同步I/O。中心思想是将所有要处理的IO事件注册到一个中心复用器上,同事主线程或进程阻塞在多路复用器上。一旦有I/O事件到来或是准备就绪,那么多路复用器返回并将事先注册的I/O事件分发到对应的处理器中。组成部分多路复用器:由OS提供,在linux一般指select,poll,epoll事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中事件处理器:负责处理特定事件的处理函数优点响应快,不必为单个同步时间原创 2021-06-11 10:11:40 · 397 阅读 · 2 评论