InfraPub 为您找到相关结果 17

深入学习golang — channel

Channel 1. 概述 “网络,并发”是Go语言的两大feature。Go语言号称“互联网的C语言”,与使用传统的C语言相比,写一个Server所使用的代码更少,也更简单。写一个Server除了网络,另外就是并发,相对python等其它语言,Go对并发支持使得它有更好的性能。 Goroutine和channel是Go在“并发”方面两个核心feature。 Channel是goroutine之间进行通信的一种方式,它与Unix中的管道类似。 Channel声明: ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType . 例如: var ch chan int var ch1 chan<- int //ch1只能写...阅读全文

博文 2021-01-25 12:39:17 博客园

Golang 中的 channel 通道详解

channel通道golang的并发模型是序列通信处理CSP(communicating sequential process)——使用通信来共享内存 ,避免goroutine因竞争共享内存频繁加锁产生的性能问题。基本数据结构golang中提供了一个特殊的类型channel实现goroutine之间的通信。channel类似于队列,先进先出。channel数据结构源码在src/runtime/chan.go下。chan 使用 hchan 表示,它的传参与赋值始终都是指针形式,每个 hchan 对象代表着一个 chan。hchan 中包含一个缓冲区 buf,它表示已经发送但是还未被接收的数据缓存。buf 的大小由创建 chan 时的参数来决定。qcount 表示当前缓冲区中有效数据的总量...阅读全文

Golang channel 通道常见使用场景

Go 的 channel 在实际项目中是怎么使用呢? channel 会有有缓冲和无缓冲两种类型,无缓冲的可以简单使用让两个 goroutine 数据同步通信。另外一种场景是对某个 object,使用 channel 作为其属性之一,那么待channel阻塞时则表明条件未满足,则需要等待其他数据结果返回。 本文列举几类常见的 channel 使用场景。 读写 package main import ( "fmt" "time" ) func WriteData(intChan chan int) { for i:=1;i<=50;i++{ intChan<-i fmt.Println("写:",i) time.Sleep(time.Millisecond*100) } close...阅读全文

博文 2021-01-24 21:22:22 debian.cn

深入理解Golang之context

context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。 作者:Turling_hu 来源: 掘金 原文链接: https://juejin.im/post/5e52688c51882549417fc671前言这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。为什么需要context在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done channel来处理此类问题。比如以下这个例子:func...阅读全文

博文 2021-01-27 09:05:27 知乎

Golang Context 探究

{ // 返回 context.Context的截止时间(也就是取消时间) Deadline() (deadline time.Time, ok bool) // 返回一个 Channel,这个 Channel 会在当前操作完成或者上下文被取消之后关闭,多次调用 Done 方法会返回同一个 Channel Done() <-chan struct{} // 返回 context.Context 结束的原因 Err() error // 从 context.Context 中获取键对应的值, 该方法可以用来传递请求特定的数据 Value(key interface{}) interface{} } Context 实现 首先我们思考为什么Golang 中需要 Context。用我们最熟悉的例子 http...阅读全文

博文 2021-02-25 09:27:27 lxkaka

使用 imagemagick 的 convert 命令处理图片

-composite newimage.png 这是将图片覆盖到底图的右下角。 7,更改图片的alpha通道 分两步: $convert image.png -define png:format=png32 image32.png $convert image32.png -channel alpha -fx "0.5" imagealpha.png 这个命令首先将image.png的格式改为png32(确保有alpha通道),然后更改alpha通道置为0.5,也就是半透明,值的范围为0到1.0 可以使用将一张透明图片覆盖到原图上的方式做水印图片: $convert image.png -gravity center -compose over overlay.png -composite...阅读全文

Irssi: 命令行下的 IRC 客户端

> # 向某人说话(不新开窗口) /notice # 向指定人发出注意消息 /me <动作>,在当前聊天室窗口中做出动作。 如做出晕倒动作:/me 晕倒 /away # 留下信息说明暂时离开,别人向你发出私聊时将会返回此消息,再重新输入 /away(不指定参数)则解除离开状 /ignore # 忽略某人的聊天内容 /set autolog on # 自动保存聊天记录 退出频道 /part <channel> # 退出一个频道,不加频道名退出当前频道,后面可以跟退出原因。 /wc # 离开当前频道 退出服务器 /quit or /exit # 退出 irssi,结束IRC会话 /disconnect...阅读全文

博文 2021-01-28 17:50:33 debian.cn

gRPC 1.23.0 发布,Google高性能 RPC 框架

<> (#19569)csharp 在 UTF8 编码/解码期间删除 byte[] 分配 (#19511)csharp:删除 AuthContext 的 Lazy 用法 (#19533)csharp 避免 HandleNewServerRpc=>HandleCallAsync 中的 capture-context (#19526)确保 Grpc 元数据包包含 Grpc.Core.targets (#19449) Objective-C ObjC 实验支持 Bazel 构建 (#19621)实现全局拦截器 (#19322) PHP PHP:修复 channel::constructor() 中缺少的 addref (#19737) Python 在迭代之前检查 call.trailing_metadata...阅读全文

博文 2019-08-18 18:31:20 debian.cn

Golang后端面试题目

,merge跟rebase 技术二面 项目相关 通过腾讯会议,腾讯的两个大佬一起面试。 项目实现爬虫的流程爬虫如何做的鉴权吗怎么实现的分布式爬虫电商系统图片多会造成带宽过高,如何解决micro服务发现mysql底层有哪几种实现方式channel底层实现java nio和 go 区别读写锁底层是怎么实现的go-micro 微服务架构怎么实现水平部署的,代码怎么实现micro怎么用怎么做服务发现的mysql索引为什么要用B+树?mysql语句性能评测?服务发现有哪些机制raft算法是那种一致性算法raft有什么特点当go服务部署到线上了,发现有内存泄露,该怎么处理还有一些非常底层的问题 总结 腾讯对于基础部分是相当重视的,总体回答的还算可以项目部分腾讯也是非常重视,从电话里面听出来有一个架构在面试我...阅读全文

博文 2020-04-13 13:13:00 2020腾讯社招

Go 公布 2.0 设计草案:规模化和扩展性、支持泛型

,Go 1 更多的是确保能快速构建包含很多独立软件包的程序。Go 2 的目标是通过允许带有类型参数的参数多态来解决编写 Go 库的问题,这些问题抽象出了不必要的类型细节。 此外,除了预期的容器类型之外,开发团队还希望能编写有用的库来操作任意的 map 和 channel 值。理想方案是编写能够同时操作 [ ]byte 和 string 值的多态函数。 type List(type T) []T func Keys(type K, V)(m map[K]V) []K 更多细节请查阅Golang 2 设计草案页面。...阅读全文

博文 2018-09-01 18:39:47 debian.cn

Golang 面试题搜集

/blob/master/question/q007.md) - [语法题目二](https://github.com/lifei6671/interview-go/blob/master/question/q008.md) - [goroutine和channel使用一](https://github.com/lifei6671/interview-go/blob/master/question/q009.md) - [实现阻塞读的并发安全Map](https://github.com/lifei6671/interview-go/blob/master/question/q010.md) - [高并发下的锁与map读写问题](https://github.com/lifei6671...阅读全文

通过 Hostapd 进行 WIFI 热点共享上网

) CONFIG_LIBNL32=y # IEEE 802.11n (High Throughput) support CONFIG_IEEE80211N=y 之后使用 make && make install 命令进行编译。系统将在 /usr/local/bin 目录下生成两个文件名为 hostapd、hostapd_cli 的可执行文件。 2.3 使用命令 cp hostapd.conf /etc/hostapd/ 将 hostapd 配置文件复制到 /etc/hostapd/ 文件夹下,并将相关字段修改为如下内容: interface=wlan1 driver=nl80211 ssid=CMSS hw_mode=g channel=7 macaddr_acl=0 auth_algs=3...阅读全文

博文 2021-01-28 17:50:31 debian.cn

GlusterFS 和 Ceph 比比看

存储世界最近发生了很大变化。十年前,Fibre Channel SAN 文件管理器是企业存储的标准。而在目前的环境中,受到基础架构即服务云的影响,数据存储需要更加灵活。 GlusterFS 和 Ceph 是两个灵活的存储系统,在云环境中表现非常出色。 在尝试了解 GlusterFS 与 Ceph 之间的相似之处和不同之处之前,让我们来讨论在云环境中对灵活存储的一些要求。 纵向扩展和横向扩展。在云环境中,必须可以很容易地向服务器添加更多存储空间以及扩展可用存储池。Ceph 和 GlusterFS 都可以通过轻松将新存储设备集成到现有存储产品中来满足这一要求。 高可用性。GlusterFS 和 Ceph 的复制是同时将数据写入不同的存储节点。这样做的结果是,访问时间增加,数据可用性也提高。在...阅读全文

博文 2017-08-09 10:35:29 debian.cn

Kubernetes源码探疑:Pod IP泄露排查及解决方法

,kubelet通过给容器打不同的label来识别之。CRI是一个统一的容器操作gRPC接口,kubelet对容器的操作,都要通过CRI请求来完成,而Docker,Rkt等容器项目则负责实现各自的CRI实现,Docker的实现即为dockershim,dockershim负责将收到的CRI请求提取出来,翻译成Docker API发给Docker Daemon。 relist通过CRI请求更新到Pod中Sandbox容器和非Sandbox容器最新状态,然后将状态信息写入kubelet的缓存podCache中,如果有容器状态发生变化,则通过pleg channel通知到syncLoop循环。对于单个pod,podCache分配了两个数组,分别用于保存Sandbox容器和非Sandbox容器的最新状态...阅读全文

Golang 操作 Kafka 样例

() config.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认 config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition config.Producer.Return.Successes = true // 成功交付的消息将在success channel返回 // 构造一个消息 msg := &sarama.ProducerMessage{} msg.Topic = "web_log" msg.Value = sarama.StringEncoder("this is a test log") // 连接kafka client, err...阅读全文

博文 2023-01-10 13:46:09 掘金