发现有一些人在通过Github的仓库进行多人协作开发时,还不太明白怎么提交代码,这里以我现在实习的公司为例,写了一篇提交代码到所维护项目的仓库的流程。
Go语言里线程池的实现
Go语言里的标准库里没有线程池的概念,不过我们可以利用Go强大的并发特性自己构建,而且在其它语言里也有成熟的设计模型可供借鉴,这里我们参考Java的线程池模型实现部分功能。
另外,确切地说,这里的线程并非真正意义上的线程,用“协程”这个概念称呼更为合适。
Go语言interface的介绍
Interface 是Go语言里很优秀的一个设计,它本身是仅仅是一个结构体,但是通过interface我们可以实现面向对象的很多特性,比如多态、动态联编等。interface 在Go 语言里使用起来的感觉,相比于其它语言也要优雅得多。
Go语言里的并发控制
在Go语言编写的程序里可能会开启多个goroutine, 这样在主 goroutine 结束前可能在其它的goroutine里,还有任务在继续运行,这样的话,我们必须堵塞主 goroutine 才能保证其它 goroutine 正常运行。但是如何在并发的程序里合理地编写代码呢?Go 语言大概为我们提供了这几种方式。
Go语言中goroutine的分析
Goroutine是Go里的一种轻量级线程——协程。相对线程,协程的优势就在于它非常轻量级,进行上下文切换的代价非常的小。对于一个goroutine ,每个结构体G中有一个sched的属性就是用来保存它上下文的。这样,goroutine 就可以很轻易的来回切换。由于其上下文切换在用户态下发生,根本不必进入内核态,所以速度很快。而且只有当前goroutine 的 PC, SP等少量信息需要保存。
Redis在Go中的应用
Go 作为一种新兴的语言,由于其本身在网络编程方面表现出来的优势,现在受到越来越多开发者们的青睐。不过,也正是因为它太新,相比于一些很成熟的语言,它的第三方库在质量和数量上并不占优势。相信随着时间的变化,Go程序员的群体日益庞大,这个问题最终会得以解决。
这里主要是介绍第三方库go-redis/redis在Go中的应用。redis是一个高性能的key-value数据库,这个不用多说,现在很多公司都在使用redis。Go语言官方已经提供了对redis的支持,但是没有redis client的官方实现,而go-redis/redis 是一个很好用的第三方库,目前托管在Github上,相比其它关于Go的redis client,上手更简单,虽然它提供的文档不够丰富,但是方法命名上保持了与redis原生命令的一致,见名知义, 稍微研究下就可以马上着手使用。
《Linux内核源代码情景分析》笔记
近来在研究Linux内核的源码,怎一个“难”字了得,看来还是自己悟性不够高。读了《深入理解LINUX内核》这本书,看起来很费劲,读完后一头雾水,还是留到以后再反复咀嚼吧。后来发现一本国人写的书《Linux内核源代码情景分析》还不错,多多少少能看懂点儿,可惜书里的讲解是基于Linux 2.4的内核讲解的,要知道2.6的内核相比之前的内核改动很大。但是万变不离其宗,原来大部分优秀的设计还是保留下来的。这两天翻阅了几章,顺便把知识点整理了下。