积分充值
 首页
前端开发
AngularDartElectronFlutterHTML/CSSJavaScriptReactSvelteTypeScriptVue.js构建工具
后端开发
.NetC#C++C语言DenoffmpegGoIdrisJavaJuliaKotlinLeanMakefilenimNode.jsPascalPHPPythonRISC-VRubyRustSwiftUML其它语言区块链开发测试微服务敏捷开发架构设计汇编语言
数据库
Apache DorisApache HBaseCassandraClickHouseFirebirdGreenplumMongoDBMySQLPieCloudDBPostgreSQLRedisSQLSQLiteTiDBVitess数据库中间件数据库工具数据库设计
系统运维
AndroidDevOpshttpdJenkinsLinuxPrometheusTraefikZabbix存储网络与安全
云计算&大数据
Apache APISIXApache FlinkApache KarafApache KyuubiApache OzonedaprDockerHadoopHarborIstioKubernetesOpenShiftPandasrancherRocketMQServerlessService MeshVirtualBoxVMWare云原生CNCF机器学习边缘计算
综合其他
BlenderGIMPKiCadKritaWeblate产品与服务人工智能亿图数据可视化版本控制笔试面试
文库资料
前端
AngularAnt DesignBabelBootstrapChart.jsCSS3EchartsElectronHighchartsHTML/CSSHTML5JavaScriptJerryScriptJestReactSassTypeScriptVue前端工具小程序
后端
.NETApacheC/C++C#CMakeCrystalDartDenoDjangoDubboErlangFastifyFlaskGinGoGoFrameGuzzleIrisJavaJuliaLispLLVMLuaMatplotlibMicronautnimNode.jsPerlPHPPythonQtRPCRubyRustR语言ScalaShellVlangwasmYewZephirZig算法
移动端
AndroidAPP工具FlutterFramework7HarmonyHippyIoniciOSkotlinNativeObject-CPWAReactSwiftuni-appWeex
数据库
ApacheArangoDBCassandraClickHouseCouchDBCrateDBDB2DocumentDBDorisDragonflyDBEdgeDBetcdFirebirdGaussDBGraphGreenPlumHStreamDBHugeGraphimmudbIndexedDBInfluxDBIoTDBKey-ValueKitDBLevelDBM3DBMatrixOneMilvusMongoDBMySQLNavicatNebulaNewSQLNoSQLOceanBaseOpenTSDBOracleOrientDBPostgreSQLPrestoDBQuestDBRedisRocksDBSequoiaDBServerSkytableSQLSQLiteTiDBTiKVTimescaleDBYugabyteDB关系型数据库数据库数据库ORM数据库中间件数据库工具时序数据库
云计算&大数据
ActiveMQAerakiAgentAlluxioAntreaApacheApache APISIXAPISIXBFEBitBookKeeperChaosChoerodonCiliumCloudStackConsulDaprDataEaseDC/OSDockerDrillDruidElasticJobElasticSearchEnvoyErdaFlinkFluentGrafanaHadoopHarborHelmHudiInLongKafkaKnativeKongKubeCubeKubeEdgeKubeflowKubeOperatorKubernetesKubeSphereKubeVelaKumaKylinLibcloudLinkerdLonghornMeiliSearchMeshNacosNATSOKDOpenOpenEBSOpenKruiseOpenPitrixOpenSearchOpenStackOpenTracingOzonePaddlePaddlePolicyPulsarPyTorchRainbondRancherRediSearchScikit-learnServerlessShardingSphereShenYuSparkStormSupersetXuperChainZadig云原生CNCF人工智能区块链数据挖掘机器学习深度学习算法工程边缘计算
UI&美工&设计
BlenderKritaSketchUI设计
网络&系统&运维
AnsibleApacheAWKCeleryCephCI/CDCurveDevOpsGoCDHAProxyIstioJenkinsJumpServerLinuxMacNginxOpenRestyPrometheusServertraefikTrafficUnixWindowsZabbixZipkin安全防护系统内核网络运维监控
综合其它
文章资讯
 上传文档  发布文章  登录账户
IT文库
  • 综合
  • 文档
  • 文章

无数据

分类

全部后端开发(21)Go(21)

语言

全部中文(简体)(20)中文(繁体)(1)

格式

全部PDF文档 PDF(19)其他文档 其他(2)
 
本次搜索耗时 0.092 秒,为您找到相关结果约 21 个.
  • 全部
  • 后端开发
  • Go
  • 全部
  • 中文(简体)
  • 中文(繁体)
  • 全部
  • PDF文档 PDF
  • 其他文档 其他
  • 默认排序
  • 最新排序
  • 页数排序
  • 大小排序
  • 全部时间
  • 最近一天
  • 最近一周
  • 最近一个月
  • 最近三个月
  • 最近半年
  • 最近一年
  • epub文档 Golang 101(Go语言101 中文版) v1.21.a

    哲学的一个设计结果。(在Go编程中,我们可以认为一个计算就是一个协 程。) 通过共享内存来通讯和通过通讯来共享内存是并发编程中的两种编程风格。 当通过共享内存来通讯的时候,我们需要一些传统的并发同步技术(比如互斥 锁)来避免数据竞争。 Go提供了一种独特的并发同步技术来实现通过通讯来共享内存。此技术即为 通道。 我们可以把一个通道看作是在一个程序内部的一个先进先出(FIFO: first in first 们说此通道处 于空槽状态。 对于一个非缓冲通道(容量为零),它总是同时处于满槽 状态和空槽状态。 每个通道内部维护着一个互斥锁用来在各种通道操作中防止数据竞争。 通道操作情形A: 当一个协程R尝试从一个非零且尚未关闭的通道接收数据的 时候,此协程R将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到 其中一个步骤的条件得到满足。 1. 如果此通道的缓冲队列不为空(这种情况下,接收数据协程队列必为 能会被另一个发送数据协程唤醒而恢复运行。 对于这种情况,此数据接 收操作为一个阻塞操作。 通道操作情形B: 当一个协程S尝试向一个非零且尚未关闭的通道发送数据的 时候,此协程S将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到 其中一个步骤的条件得到满足。 1. 如果此通道的接收数据协程队列不为空(这种情况下,缓冲队列必为 空), 一个接收数据协程将从此队列中弹出,此协程将接收到发送协程S
    0 码力 | 821 页 | 956.82 KB | 1 年前
    3
  • mobi文档 Golang 101(Go语言101 中文版) v1.21.a

    学的一个设计结果。(在Go编程中,我们可以认为一个计算就是一个协程。) 通过共享内存来通讯和通过通讯来共享内存是并发编程中的两种编程风格。 当 通过共享内存来通讯的时候,我们需要一些传统的并发同步技术(比如互斥 锁)来避免数据竞争。 Go提供了一种独特的并发同步技术来实现通过通讯来共享内存。此技术即为通 道。 我们可以把一个通道看作是在一个程序内部的一个先进先出(FIFO:first in first out)数据队列。 们说此通道处于空 槽状态。 对于一个非缓冲通道(容量为零),它总是同时处于满槽状态和 空槽状态。 每个通道内部维护着一个互斥锁用来在各种通道操作中防止数据竞争。 通道操作情形A: 当一个协程R尝试从一个非零且尚未关闭的通道接收数据的时 候,此协程R将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到其中 一个步骤的条件得到满足。 1. 如果此通道的缓冲队列不为空(这种情况下,接收数据协程队列必为 能会被另一个发送数据协程唤醒而恢复运行。 对于这种情况,此数据接收 操作为一个阻塞操作。 通道操作情形B: 当一个协程S尝试向一个非零且尚未关闭的通道发送数据的时 候,此协程S将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到其中 一个步骤的条件得到满足。 1. 如果此通道的接收数据协程队列不为空(这种情况下,缓冲队列必为 空), 一个接收数据协程将从此队列中弹出,此协程将接收到发送协程S
    0 码力 | 608 页 | 1.08 MB | 1 年前
    3
  • pdf文档 Golang 101(Go语言101 中文版) v1.21.a

    设计结果。(在Go编程中,我们可以认为一个计算就是一个协程。) 通过共享内存来通讯和通过通讯来共享内存是并发编程中的两种编程风格。 当通过 共享内存来通讯的时候,我们需要一些传统的并发同步技术(比如互斥锁)来避免 数据竞争。 Go提供了一种独特的并发同步技术来实现通过通讯来共享内存。此技术即为通道。 我们可以把一个通道看作是在一个程序内部的一个先进先出(FIFO:first in first out)数据队列。 如果此队列中当前存放的值的个数为零,则我们说此通道处于空槽状态。 对 于一个非缓冲通道(容量为零),它总是同时处于满槽状态和空槽状态。 每个通道内部维护着一个互斥锁用来在各种通道操作中防止数据竞争。 通道操作情形A: 当一个协程R尝试从一个非零且尚未关闭的通道接收数据的时 候,此协程R将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到其中一 个步骤的条件得到满足。 1. 如果此通道的缓冲队列不为空(这种情况下,接收数据协程队列必为空),此 另一个发送数据协程唤醒而恢复运行。 对于这种情况,此数据接收操作为一 个阻塞操作。 第21章:通道 211 通道操作情形B: 当一个协程S尝试向一个非零且尚未关闭的通道发送数据的时 候,此协程S将首先尝试获取此通道的锁,成功之后将执行下列步骤,直到其中一 个步骤的条件得到满足。 1. 如果此通道的接收数据协程队列不为空(这种情况下,缓冲队列必为空), 一个接收数据协程将从此队列中弹出,此协程将接收到发送协程S发送的值。
    0 码力 | 591 页 | 21.40 MB | 1 年前
    3
  • pdf文档 如何消除程序中的数据竞争-周光远

    开始接收 无缓冲通道 • 所有通道:开始发送 → 接收完成(同一个数据); • 对于无缓冲channel:开始接收 → 发送完成(同一个数据); 开始发送 接收完成 其他的对于init函数,锁,协程,原子操作,sync包里的功能,还有许多保证,更详细可以看: https://golang.org/ref/mem https://go101.org/article/memory-model.html race检测数据竞争 race只记录最后一次的写访问,因此可能不能一次检测到所有的数据竞争,消除当前已知问题后,需 要再次检测。 race检测数据竞争 消除数据竞争实践 消除数据竞争 • 互斥锁/读写锁 • 原子操作 • 通道 可用的happens : 以map为例: • Sync包中的其他能力(sync.Map, sync.WaitGroup, sync.Cond,sync.Once) 本身的读写访问需要考虑数据竞争 而channel和map底层虽然也是结构体,使用者实际使用的是其指针,其 自身的读写只需考虑指针的数据竞争 在使用读写锁保护map时,如果需要修改map里的元素, 使用读锁还是写锁? 消除数据竞争的误区:锁保护的是谁? 总结 • 数据竞争的底层原理 • 消除数据竞争的原则 • 数据竞争的检测 • 数据竞争的常见消除方法 • 其他的一些误区 基于Golang的特性优化
    0 码力 | 30 页 | 1.92 MB | 1 年前
    3
  • pdf文档 Go 入门指南(The way to Go)

    for-range 的配套用法 8.4 map 类型的切片 8.5 map 的排序 8.6 将 map 的键值对调 第9章:包(package) 9.1 标准库概述 9.2 regexp 包 9.3 锁和 sync 包 - 3 - 本文档使用 书栈(BookStack.CN) 构建 9.4 精密计算和 big 包 9.5 自定义包和可见性 9.6 为自定义包使用 godoc 9.7 使用 go 204 - 本文档使用 书栈(BookStack.CN) 构建 第9章:包(package) 本章主要针对 Go 语言的包展开讲解。 9.1 标准库概述 9.2 regexp 包 9.3 锁和 sync 包 9.4 精密计算和 big 包 9.5 自定义包和可见性 9.6 为自定义包使用 godoc 9.7 使用 go install 安装自定义包 9.8 自定义包的目录结构、go 方法一样检验正则的有效性,但是当正则不合法时程序将 panic(详情查看第 13.2 节)。 9.2 regexp 包 - 209 - 本文档使用 书栈(BookStack.CN) 构建 9.3 锁和 sync 包 在一些复杂的程序中,通常通过不同线程执行不同应用来实现程序的并发。当不同线程要使用同一个变量时,经常会 出现一个问题:无法预知变量被不同线程修改的顺序!(这通常被称为资源竞争,指不同线程对同一变量使用的竞争)显
    0 码力 | 466 页 | 4.44 MB | 1 年前
    3
  • pdf文档 Go 入门指南(The way to Go)

    确性。另外我们也可以 使用 MustCompile 方法,它可以像 Compile 方法一样检验正则的有效性,但是当正则不合法时程序 将 panic(详情查看第 13.2 节)。 9.3 锁和 sync 包 在一些复杂的程序中,通常通过不同线程执行不同应用来实现程序的并发。当不同线程要使用同一个变量 时,经常会出现一个问题:无法预知变量被不同线程修改的顺序!(这通常被称为资源竞争,指不同线程对同 经典的做法是一次只能让一个线程对共享变量进行操作。当变量被一个线程改变时(临界区),我们为它上 锁,直到这个线程执行完成并解锁后,其他线程才能访问它。 特别是我们之前章节学习的 map 类型是不存在锁的机制来实现这种效果(出于对性能的考虑),所以 map 类 型是非线程安全的.当并行访问一个共享的 map 类型的数据,map 数据将会出错。 在 Go 语言中这种锁的机制是通过 sync 包中 Mutex 来实现的。sync 来源于 来源于 "synchronized" 一词,这意 味着线程将有序的对同一变量进行访问。 sync.Mutex 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区。 假设 info 是一个需要上锁的放在共享内存中的变量。通过包含 Mutex 来实现的一个典型例子如下: import “sync” type Info struct { mu sync
    0 码力 | 380 页 | 2.97 MB | 1 年前
    3
  • pdf文档 使用Go与redis构建有趣的应用

    Redis 简介 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三. 使⽤用 Redis 构建在线⽤用户统计器器 路路线图 ⼀一. Redis 简介 ⼆二. 使⽤用 Redis 构建锁 三. 使⽤用 Redis 构建在线⽤用户统计器器 四. 使⽤用 Redis 构建⾃自动补完程序 // "PONG" } 连接服务器器 执⾏行行命令并获取回复 将回复转换为字符串串 锁 lock 锁 锁是⼀一种同步机制, 它可以保证⼀一项资源在任何时候只能被⼀一个进程使⽤用, 如果有其他进程想要 使⽤用相同的资源, 那么它们就必须等待, 直到正在使⽤用资源的进程放弃使⽤用权为⽌止。 锁 锁是⼀一种同步机制, 它可以保证⼀一项资源在任何时候只能被⼀一个进程使⽤用, 如果有其他进程想要 那么它们就必须等待, 直到正在使⽤用资源的进程放弃使⽤用权为⽌止。 ⼀一个锁实现通常会有获取(acquire)和释放(release)这两种操作: 锁 锁是⼀一种同步机制, 它可以保证⼀一项资源在任何时候只能被⼀一个进程使⽤用, 如果有其他进程想要 使⽤用相同的资源, 那么它们就必须等待, 直到正在使⽤用资源的进程放弃使⽤用权为⽌止。 ⼀一个锁实现通常会有获取(acquire)和释放(release)这两种操作:
    0 码力 | 176 页 | 2.34 MB | 1 年前
    3
  • pdf文档 Go性能优化概览-曹春晖

    在后端系统开发中,锁瓶颈是较常⻅的问题,⽐如⽂件锁 阻塞导致⾼延迟 还有⼀些公司的 metrics 系统设计,本机上会有 udp 通信 阻塞导致⾼延迟 锁瓶颈的⼀般优化⼿段: • 缩⼩临界区:只锁必须锁的对象,临界区内尽量不放慢操作,如 syscall • 降低锁粒度:全局锁 -> 对象锁,全局锁 -> 连接锁,连接锁 -> 请求锁,⽂ 件锁 -> 多个⽂件各种锁 • 同步改异步:如同步⽇志 库(evio,gev 等)修改⽹络编程⽅式(只适⽤于对延迟不敏感的业务) • 通过修改代码,减少函数调⽤层级(难) 总结⼀下 • 阻塞问题 • 上游系统阻塞 • 让上游赶紧解决! • 锁阻塞 • 减少临界区范围 • 降低锁粒度 • Global lock -> sharded lock • Global lock -> connection level lock • Connection level
    0 码力 | 40 页 | 8.69 MB | 1 年前
    3
  • pdf文档 2.Go语言实现中的几个研究课题_毛康力

    c2并不能独⽴立对待 • 要么全部成功,要么失败,否则可能死锁 • 单纯对select结构加锁⾏行不通!!! • 共享⼀一个全局锁? select • 研究课题:能否实现lock-free channels? • 使⽤用前获取select中的所有channel的锁 • 按channel结构体的地址顺序加锁 ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 • multiple processors with non-uniform memory access (NUMA) 调度 • 起点:调度状态全局锁 • ⼯工作流窃取调度器 • ⺴⽹网络poller整合进调度器 • ⽆无锁⼯工作队列 当前调度器 G - goroutine; P - logical processor; M - OS thread (machine) • 构造⼀一个图(Graph) • L1锁住后再加锁L2,则构造边L1->L2 • 如果图中出现环,可能存在死锁 • 当图上新加⼀一条边时,判断是否存在环 channel死锁 • Go不仅有锁,还有channel • channel其实是信号量 • 关于信号量的死锁检测,⺫⽬目前还没有相关的理论 ⼤大纲 • 并发 • 接⼝口 • 调度 • 垃圾回收 • 死锁检测
    0 码力 | 37 页 | 566.26 KB | 1 年前
    3
  • pdf文档 Golang在接入层长连接服务中的实践-黄欣

    下,容易发生panic)(竟态问题) • 对象编程 – 封装:conn资源(包括goruntine)作为结构体封装起来,保证所有资源 销毁干净 – 解耦:保证其他模块不直接使用对象中资源 – 同步:竞态需要锁 特点:有状态,存在大量的公共资源并发访问 心得—coding—实现 • eg: accept conn object conn object conn object Goruntines: 范围最多60s – 方案: • 时间轮 • 实现 – Channel 心得—channel使用优化 • 业务场景: • 程序层面: • 问题? – Channel在这种高并发场景下,锁消耗巨大,性能有瓶颈 心得—channel优化 • 测试 – Golang1.5 – GOMAXPROCS = A – Send goruntine = B – Read goruntine 50000 10 54718 9/1 83 10 50000 10 672448 10/20 86 15 50000 10 672448 8/24 81 心得—channel优化 • 方案一:无锁队列(cas) 心得—channel优化 • 方案一:fqueue没有触发机制 – 轮训(no) – 做一个通知机制(yes) 心得—channel优化 • 效果 – GOMAXPROCS
    0 码力 | 31 页 | 1.67 MB | 1 年前
    3
共 21 条
  • 1
  • 2
  • 3
前往
页
相关搜索词
Golang101Go语言中文文版中文版v121如何消除程序数据竞争周光远入门指南Thewayto使用redis构建有趣应用性能优化概览春晖实现几个研究课题研究课题毛康力接入层长连接服务实践黄欣
IT文库
关于我们 文库协议 联系我们 意见反馈 免责声明
本站文档数据由用户上传或本站整理自互联网,不以营利为目的,供所有人免费下载和学习使用。如侵犯您的权益,请联系我们进行删除。
IT文库 ©1024 - 2025 | 站点地图
Powered By MOREDOC AI v3.3.0-beta.70
  • 关注我们的公众号【刻舟求荐】,给您不一样的精彩
    关注我们的公众号【刻舟求荐】,给您不一样的精彩