虽然提供了channel来保证协程中的通信,在某些情况下,还是更适合使用锁来保证线程的安全.go语言中的锁分两种:互斥锁mutex和读写锁rwmutex1.互斥锁 mutex互斥锁是线程安全中最常用的锁,基本原理就是对某个操作进行加锁,无论读写同一时间内只有一个协程可以对当前数据进行操作,只有对当前锁解锁后其他协程才可以继续进行操作,互斥锁不可以重入,对一个已经加过锁的数据再次加锁会引起恐慌,同样
转载
2023-08-18 18:17:58
50阅读
Go语言中的锁简单易用,本文整理一下锁的实现原理。Golang中锁有两种,互斥锁Mutex和读写互斥锁RWMutex,互斥锁也叫读锁,读写锁也叫读锁,相互之间的关系为:写锁需要阻塞写锁:一个协程拥有写锁时,其他协程写锁定需要阻塞写锁需要阻塞读锁:一个协程拥有写锁时,其他协程读锁定需要阻塞读锁需要阻塞写锁:一个协程拥有读锁时,其他协程写锁定需要阻塞读锁不能阻塞读锁:一个协程拥有读锁时,其他协程也可以
转载
2023-12-31 16:05:01
36阅读
# 深度解密Go语言
Go语言是一种静态类型、编译型和并发的编程语言,由Google开发。它的设计目标是提供一种简单、高效和可靠的编程语言,特别适用于大规模的系统开发。本文将深度解密Go语言的特性和用法,并提供一些代码示例帮助读者更好地理解。
## 并发编程
Go语言的一个重要特性是并发编程。它提供了goroutine和channel机制来实现轻量级的并发操作。goroutine是一种轻量级
原创
2023-08-10 15:41:46
45阅读
对称加密中,加密和解密使用相同的密钥,因此必须向解密者配送密钥,即密钥配送问题。而非对称加密中,由于加密和解密分别使用公钥和私钥,而公钥是公开的,因此可以规避密钥配送问题。非对称加密算法,也称公钥加密算法。 1977年,Ron Rivest、Adi Shamir、Leonard Adleman三人在美国公布了一种公钥加密算法,即RSA公钥加密算法。RSA是目前最有影响力和最常用的
转载
2023-11-18 21:53:37
6阅读
go语言Lotus项目开发实战〇、Lotus设计文档及节点使用1、文档1.1、官方文档1.2、文档导读、解读2、名词解释2.1、CID是什么意思?2.2、StateTree是什么意思?2.3、Actor是什么意思?2.4、StateTree和Actor的关系是什么?2.5、DAG是什么意思?2.6、什么是CAR文件(.car)?2.7、什么是HAMT?2.8、如何理解TipSet3、节点使用4、
转载
2024-04-25 21:45:42
24阅读
一、Golang简介1.1概述Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。 Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。而他最广为人知的特性便是语言层面上对多核编程的支持,他有简单的关键字go来实现并行,就像下面这样:
转载
2023-07-26 16:44:04
61阅读
0. 前言最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议学习了 TLS 相关知识,下面对之前的学习做一下简单总结参考文献:TLS完全指南系列文章
1. 基本原理TLS 依赖两种加密技术:
对称加密(symmetric encryption)非对称加密(asymmetric encryption)1.1 对称加密加密方和解密方共享
转载
2023-07-12 14:54:29
93阅读
1、概念加解密分为以下几种对称加密, 加解密都使用的是同一个密钥, 其中的代表就是AES、DES非对加解密, 加解密使用不同的密钥, 其中的代表就是RSA签名算法, 如MD5、SHA1、HMAC等, 主要用于验证,防止信息被修改, 如:文件校验、数字签名、鉴权协议Base64不是加密算法,它是一种数据编码方式,虽然是可逆的,但是它的编码方式是公开的,无所谓加密。本文也对Base64编码方式做了简要
转载
2023-11-19 10:53:54
109阅读
在 Golang 里有专门的方法来实现锁,就是 sync 包,这个包有两个很重要的锁类型
一个叫 Mutex, 利用它可以实现互斥锁。一个叫 RWMutex,利用它可以实现读写锁。互斥锁:Mutex概念:使用互斥锁(Mutex,全称 mutual exclusion)是为了来保护一个资源不会因为并发操作而引起冲突导致数据不准确。使用Mutext锁虽然很简单,但是仍然有几点需要注意:
- 同协程中,
转载
2023-12-26 06:56:48
80阅读
要知道的是在 Go 语言中,信道的地位非常高,面对并发问题,我们始终应该优先考虑使用信道。但是如果通过信道解决不了的,不得不使用共享内存来实现并发编程的,那 Golang 中的锁机制必须会使用而在 Golang 里有专门的方法来实现锁,在 sync 包里面。这个包有两个很重要的锁类型一个叫 Mutex, 利用它可以实现互斥锁。一个叫 RWMutex,利用它可以实现读写锁。互斥锁
转载
2024-02-11 14:56:59
41阅读
摘要在项目开发过程中,当操作一些用户的隐私信息,诸如密码,帐户密钥等数据时,往往需要加密后可以在网上传输.这时,需要一些高效地,简单易用的加密算法加密数据,然后把加密后的数据存入数据库或进行其他操作;当需要读取数据时,把加密后的数据取出来,再通过算法解密.1. 关于加密解密当前我们项目中常用的加解密的方式无非三种.对称加密, 加解密都使用的是同一个密钥, 其中的代表就是AES,DES非
转载
2023-06-20 22:05:26
65阅读
相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止!因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时
原创
2021-02-25 10:23:00
214阅读
好久不见,你还好吗?距离上一篇文章已经过去了一个多月了,迟迟未更新文章,我也很着急啊,哈哈。跟大家汇报一下,这段时间我在看 proc.go 的源码,其实就是调度器的源码。代码有几千行之多,不像以往的 map,channel 等等。想把这些代码都看明白,是一个庞大的工程。到今天为止,我也不敢说我都看明白了。要深挖下去的话,会无穷无尽,所以阶段性的探索就到这里。接下来就把这段时间的探索分享出来。其实,
原创
2021-02-25 10:31:55
139阅读
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。我要说明的是,这里对 map 的基本用法涉及比较少,我相信可以通过阅读其他入门书籍了解。本文的内容比较深入,但是由于我画了各种图,我相信很容易看懂。放上本文的内容提纲:什么是 map维基百科里这样定义 map:In computer science, an a
原创
2021-02-25 10:37:52
212阅读
目录
什么是 pprofpprof 的作用pprof 如何使用
runtime/pprofnet/http/pprof
pprof 进阶
Russ Cox 实战查找内存泄露
总结参考资料
相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这
转载
2019-11-12 11:30:00
86阅读
2评论
好久不见,你还好吗?距离上一篇文章已经过去了一个多月了,迟迟未更新文章,我也很着急啊。 跟大家汇报一下,这段时间我在看 proc.go 的源码,其实就是调度器的源码。代码有几千行之多,不像以往的 map,channel 等等。想把这些代码都看明白,是一个庞大的工程。到今天为止,我也不敢说我都看明白了 ...
转载
2021-10-06 22:35:00
145阅读
2评论
大家好!“深度解密 Go 语言”系列好久未见,我们今天讲 channel,预祝阅读愉快!在开始正文之前,我们先说些题外话。 上一篇关于 Go 语言的文章讲 Go 程序的整个编码、编译、运行、退出的全过程。文章发出后,反响强烈,在各大平台的阅读量都不错。例如登上了 48 小时阅读排行榜,并且受到 ...
转载
2021-10-06 22:34:00
159阅读
2评论
上一篇文章我们详细分析了 map 的底层实现,如果你也跟着阅读了源码,那一定对 unsafe.Pointer 不陌生,map 对 key 进行定位的时候,大量使用。 unsafe.Pointer 位于 unsafe 包,这篇文章,我们来深入研究 unsafe 包。先说明一下,本文没有之前那么长了,你 ...
转载
2021-10-06 22:30:00
57阅读
2评论
本文介绍了Go语言中的加密技术,重点讲解了哈希和对称加密的核心概念及实现方法。主要内容包括: 基础概念:区分明文、密文、加密/解密过程,以及哈希、对称加密和非对称加密的特点。 哈希应用:展示了MD5、SHA-256等哈希算法实现,并演示了更安全的HMAC消息认证码的生成与验证。 对称加密:重点介绍了AES-GCM模式,提供加密示例代码,强调其同时保障机密性和完整性的优势。 安全建议:强调使用标准算法、妥善管理密钥、选择正确的加密工具等最佳实践。 文章通过具体代码示例,帮助开发者理解如何在Go中实现安全的加密
我们都知道,Go语言就是为了高并发而诞生的,而且Go语言也是第一个在语言层面实现并发的,在一个进程内部可以启动成千上万个goroutine(例程、协程),这与线程启动是不同的,线程还是要考虑CPU核心数的限制,启动太多,性能反倒会受到影响。多个goroutine并发运行,也给我们带来一定困扰,这一点与线程类似的,goroutine之间需要协同,避免出现共享资源竞争的问题。在Go语言之