摘要:最近在学习语言,基本语法熟悉之后,想看一些开源项目,于是就找到了,在看源码的时候,对进行了阅读,一下内容仅供参考。源码这种事情,还是可以多带带拿出来,针对看不懂的地方进行调试,快速的了解。
最近在学习go语言,基本语法熟悉之后,想看一些开源项目,于是就找到了NSQ,在看NSQ源码的时候,对signal进行了阅读,一下内容仅供参考。linux信号量知识点
go 语言singnal的源码(部分)图中可以看到信号来一共是62个,32和33没有
非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。
1到31号都是不可靠信号
type handler struct { mask [(numSig + 31) / 32]uint32 } func (h *handler) want(sig int) bool { return (h.mask[sig/32]>>uint(sig&31))&1 != 0 } func (h *handler) set(sig int) { h.mask[sig/32] |= 1 << uint(sig&31) } func (h *handler) clear(sig int) { h.mask[sig/32] &^= 1 << uint(sig&31) }
总结type handler struct :定义了处理信号量的数据结构,mask [(numSig + 31) / 32]uint32中numSig是65,所以就是一个2个元素的数组,元素类型是uint32位的,4字节
set函数中,mask数组的初始化都是0,uint(sig&31)是整数截取后5位,左移一位是因为信号量是从1开始的。因此运算完之后,前31个信号量存放在mask数组的第一个元素中,这个4字节的元素可以表示成32位的二进制,0000,0000,0000,0000,0000,0000,0000,0000,从后往前,编号从0到31,如果信号量是1,则编号为1的位置置1。就像是有32个桶,每个桶都有一个编号,从0到31,如果有这个信号量的值,就在桶里放满水。
want函数是判断给定的整数,是不是这个62个信号量。
clear 利用&^,将对应位置清零
go语言这种处理方式阅读起来还是挺巧妙的,之前看得时候也是弄明白,现在记下来,希望能提供一点用处。
linux信号量的知识储备不全,先获取了linux信号量的知识之后才搞明白为什么这么写的。
源码这种事情,还是可以多带带拿出来,针对看不懂的地方进行调试,快速的了解。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/33606.html
原理简介第一步 采集配置DataAnt Agent 进行对 config.yaml 的配置, 来进行APISIX 项采集器初始化和注册。DataAnt Cloud接收数据后,数据经过处理后会存放到数据库中第二步 告警通知数据经过告警匹配处理,会通知聚合最终通过配置的通知方式将告警发送,以实时接收到APISIX情况第三步 配置指南访问 DataAnt Cloud,注册后并登录平台下载DataAnt ...
摘要:只有当触发了或才能终止进程退出。退出时执行如下操作会将挖矿功能停止,网络停止等操作。 作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 本章介绍bytom代码启动、节点初始化、及停止的过程 作者使用MacOS操作系统,其他平台也大同小异Golang V...
大家都知道,在python当中,需要面对是各种各样的问题,比如我们需要用到的是:使用python爬虫实现子域名探测,这种技能是值得我们去进行学习的,但是学习的话,内容还是比较多的,下面就具体的内容,给大家做出一个详细解答。 前言 意义:子域名枚举是为一个或多个域查找子域的过程,它是信息收集阶段的重要组成部分。 实现方法:使用爬虫与字典爆破。 一、爬虫 1.ip138 defsear...
我们在阅读博客和文档的时候,通常倾向于阅读配有图形的这些文章。如果一篇技术类文章从头到尾都是文字,将十分影响读者的阅读体验, 也不便于读者理解。还有我们在进行一些项目源码分析时,边阅读代码,边绘制一些图形能够极大的提升效率,同时也能加强自己理解。 这片博文我将介绍我是如何绘制调用图和'类图'(不是面向对象语言中的类图)帮助自己更好地理解Golang项目的。Golang目前还没有关于...
我们可能在很多地方如 README 文件、Makefile 文件以及 Dockerfile 文件中看到GO111MODULE=on, 对于刚接触的Golang的开发者可能对此有很多疑惑。这片文章,我将详细介绍GO111MODULE变量的意义,以及什么时候需要使用到该变量, 同时也总结了一些在使用 Go Modules 时需要注意的细节,帮助你在下次遇到这个变量时不再疑惑。GO111MODULE=o...
阅读 3499·2021-11-23 09:51
阅读 3680·2021-11-15 11:37
阅读 3306·2021-09-02 15:21
阅读 2604·2021-09-01 10:31
阅读 758·2021-08-31 14:19
阅读 706·2021-08-11 11:20
阅读 3170·2021-07-30 15:30
阅读 1490·2019-08-30 15:54