文章目录前言原理初探共享内存的创建过程系列 API 的使用ftokshmgetshmatshmdtshmctl共享内存实例 前言 总结一下最近对于共享内存的学习, 可能比较浅显或者有疏漏, 欢迎指正! 原理初探 我们知道, 进程空间相互隔离, 互相对立, 但是共享内存允许多个进程可以访问同一块内存来达到进程间通信的目的. 共享内存是最高效的 IPC 机制, 它不涉及任何进程间的数据传输, 而且他和进程同处于用户空间, 不像消息队列, 信号量是内核空间的系统对象, 不需要花费额外的数据拷贝, 但是同时他并没有预防竞态条件, 也就是说在多进程利用共享内存进行通信的情况下, 我们需要自己去利用锁等操作来进行同步 共享内存的创建过程 当我们创建了一块共享内存, 其实是在 tmpfs 中创建了一个文件 (这个文件是存储于内存的), 也就意味着在 tmpfs 中创建了一个 iNode 节点 然后我们需要将这个创建好的文件映射到进程中 (如下图, 此图来自网络, 应该是哪个博客或者知乎吧…已经记不清了) 我们创 继续阅读 >>


吕子健 18/11/08 23:11:47
从6月开始,陆续关注了极客时间的几个专栏,这个知识付费平台给我的感觉是质量还蛮高的,里面的授课讲师也都是业内大牛。我自己购买学习了下面三门课程,分别是《数据结构与算法之美》、《从0开始学架构》、《Nginx核心知识100讲》,我觉着对一名Linux C/C++后台开发新手或者刚入门的同学来说,这三门课程还是很值的推荐的,干货满满,关于详细介绍和具体内容,大家可以扫下面二维码,自己去了解一下。 推荐一下陶辉大神的博客:陶辉的博客 一起成长! 作者:Tanswer_ 发表于 2018/11/07 21:57:38 原文链接 https://blog.csdn.net/Tanswer_/article/details/83832744 阅读:55 继续阅读 >>


杜肖孟 18/11/07 21:57:38
1.数据复制概述 1.1数据复制定义 数据复制使一个服务上的数据与另一个服务上数据保持同步 1.2复制用途 数据分布 负载均衡 备份 高可用和故障切换 MySQL升级测试 2.数据复制工作原理 2.1复制工作流程介绍(以主从架构为例) MySQL复制原理比较简单,其核心工作示意图如下: 主库把更新操作记录在二进制日志文件中 备库上的I/O线程收到主库的更新事件后,读取新增的二进制日志并写入自己的中继日志中 备库读取中继日志,将事件在数据库上重放,更新自身数据库数据 2.2对主从复制架构的思考 看完图2.1中MySQL主从架构,读者会不会感觉如果去掉中继日志,整个复制流程会更简单?中继日志究竟在复制架构中产生了什么作用? 如果备库去掉写中继日志这个流程,那么备库每次只需要读取binlog事件数据,紧接着直接重放sql事件即可。而增加了中继日志,不仅增加了流程的复杂性,而且多了一次写文件I/O的操作消耗了系统性能 其实中继日志对备机而言就是缓存事件的buffer而已,其作用就是对备机的俩个核心 继续阅读 >>


苗帅 18/11/07 17:35:27
最近在开发的过程中有一个点让我比较感兴趣,就是使用Lambda表达式的方式来实现Comparator接口。 1. 关于Comparator和Comparable 既然提到了Comparator,那就大致来说一下Comparator和Comparable接口的区别。 Comparator是一种策略模式,即被比较的对象自身不需要做任何改变(实现任何排序接口),而是通过实例化一个Comparator策略来实现对象之间的排序。 Comparable支持对象自身进行改变(对象自身实现Comparable接口),从而具有排序功能。 举个例子来说,一组对象需要用Collection的sort方法进行排序,有两种方法,要么是对象实现Comparable接口,自身具有可排序属性;要么是实现一个Comparator比较器,在调用sort方法是传入。 下面再来说一说Lambda表达式。 2. Lambda表达式 我们都知道,Lambda表达式是Java里面的函数式编程,那么在使用Lambda表达式首先要满足这样一个条件:首 继续阅读 >>


祝一迪 18/11/06 21:33:23
最简单的二分 1.循环实现 template <typename T> int binary_search(const vector<T> &set, const T &value) { auto low = set.begin(); auto high = set.end(); auto high_dump = high; auto low_dump = low; auto mid = low + ((high - low) >> 1); /*1. mid=(low+high)/2,如果 low 和 high 太大就会产生溢出*/ while ((low <= high) && (mid != high_dump)) /*2. 一定是 <= */ { if (*mid == value) return mid - low_dump; /*3. 一定要+1,-1,不然当  继续阅读 >>


刘生玺 18/11/04 22:52:10
前言 好久没写博客,我一直都觉得写博客说明最近很在学习状态阿。也说明确实很久都没在状态了。 终于穿上了秋裤,冬天和暖气都小跑着赶来了,我的大学时光也所剩无多,我在这里随便记下两三言,愿之后依然能想起此刻的心情。 秋招 8月中从深圳回到学校,一边等转正的结果,一边投了几家别的,开学之后,因为小组地方都没了,在东区三楼咖啡店答了N场笔试。 本来打算中秋回家了,因为9月中已经收到了转正意向书,并且被两个B司虐的不要不要的,然而美好的双假(中秋加国庆)被墨迹的体侧拖累了。再回家已经是中秋之后了。 从回家的路上开始补Produce101,心情是真的很放松呢,毕竟7个月没回家了。然而到家的第一顿饭还没吃上,广州的猪场便打来电话要求去面试,一番和HR的墨迹,最终约在了国庆之后的工作日。 放假在家的我彻底转换为咸鱼状态,101,电影,吃,买衣服,串门,这中间熊厂又给了面试机会,北京的现场面,时间安排在了10月中旬。那时心里已经有点感觉了,我的10月注定没有那么轻松。 国庆之后便是 家–>学校–>广州–> 继续阅读 >>


康艺杰 18/11/04 18:10:14
1